I'm newish to R and stack overflow, plus I'm not experienced at coding, and I'm hoping for some assistance. I have a dataframe where I'd like to do the same action on multiple variables. I wrote a function for the actions I'd like to take, but I'm not sure how to change the column names so the function acts on each variable separately.
#Fake Data
#index for a list of traits, and the current food type for each pet
shelterpets <- base::data.frame(
ID = c("1", "2", "3", "4", "5", "6", "7", "8", "9", "10"),
index_agility = round(runif(10, min=-0.4, max=0.4), digits = 2),
index_boldness = round(runif(10, min=-0.4, max=0.4), digits = 2),
index_curiousity = round(runif(10, min=-0.4, max=0.4), digits = 2),
index_dexterity = round(runif(10, min=-0.4, max=0.4), digits = 2),
index_empathy = round(runif(10, min=-0.4, max=0.4), digits = 2),
food_type = c("diet_food", "diet_food", "regular_food", "diet_food", "regular_food", "regular_food", "regular_food", "diet_food", "diet_food", "regular_food")
)
# function to look at index for each trait, current food type, and suggest changes to food type
function(petfood) {
# variable to capture predicted food type: diet_food, regular_food
shelterpets$food10_trait <- NA
#pet previously on diet_food and above 0.10 then confirm diet_food, else predict regular_food
shelterpets$food10_trait <- ifelse(shelterpets$food_type == "diet_food",
ifelse(shelterpets$index_trait >= 0.10, "diet_food", "regular_food"),
shelterpets$food10_trait)
#pet previously on regular_food and below -0.10 then confirm regular_food, else predict diet_food
shelterpets$food10_trait <- ifelse(shelterpets$food_type == "regular_food",
ifelse(shelterpets$index_trait <= -0.10, "regular_food", "diet_food" ),
shelterpets$food10_trait)
#typecast
shelterpets$food10_trait <- as.factor(shelterpets$food10_trait)
#update trait so replace "trait" with "agility", then "boldness", etc.
}
And what I want it to look like is
ID index_agility index_boldness index_curiousity index_dexterity index_empathy food_type food10_agility food10_boldness
1 1 0.26 -0.28 0.17 0.17 0.28 diet_food diet_food regular_food
2 2 0.17 -0.12 -0.25 0.06 0.06 diet_food diet_food regular_food
3 3 0.24 0.14 -0.13 0.25 0.28 regular_food diet_food diet_food
4 4 -0.07 0.30 -0.32 0.06 0.23 diet_food regular_food diet_food
5 5 0.33 0.00 0.13 0.23 -0.18 regular_food diet_food diet_food
6 6 0.17 -0.20 0.01 0.25 0.17 regular_food diet_food regular_food
food10_curiousity food10_dexterity food10_empathy
1 diet_food diet_food diet_food
2 regular_food regular_food regular_food
3 regular_food diet_food diet_food
4 regular_food regular_food diet_food
5 diet_food diet_food regular_food
6 diet_food diet_food diet_food
I made this to start
#get names in array to hopefully pass to the function, so drop ID and food_type
pet <- as.matrix(colnames(shelterpets))
pet <- pet[-c(1,7),,drop=F]
and I saw these questions, but I didn't quite follow how they worked enough to adapt them:
Thanks for any pointers you can give.