我对R和Stack Overflow都不太熟悉,而且我在编程方面也没有经验,希望能得到一些帮助。我有一个数据框,想对多个变量执行相同的操作。我写了一个函数来执行所需的操作,但我不知道如何更改列名以便该函数可以单独地作用于每个变量。
#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.
}
我想要它看起来像什么:
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
我创建了这个来开始
#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]
我看到了这些问题,但我还不太明白它们的工作原理,无法适应它们:
感谢您能给出的任何指导。
ifelse
调用即可计算food_trait
列。 - Parfait