我有一个很大的数据框,正在尝试计算许多问题的分数。这是一些示例数据。
Q1 = c("apple", "banana", "cider", "muffin", "chocolate")
Q2 = c("orange", "kiwi", "calzone", "cupcake", "cake")
ID = c("P1", "P2", "P3", "P4", "P5")
mydf = data.frame(Q1,Q2,ID)
answer_key = c("apple", "kiwi", "pizza", "dessert", "cake")
我一直在尝试对整个数据框使用 ifelse 和 %in%
mydf = ifelse(mydf %in% answer_key, 1,0)
但它不起作用,当我需要数据帧时它会返回一个向量。我只是想替换我的值,而不必对每个问题都这样做,因为有很多:
mydf$Q1 <-ifelse(mydf$Q1 == "apple", 1, 0)
mydf$Q2 <-ifelse(mydf$Q2 == "kiwi", 1, 0)
最佳答案
也许这就是您正在寻找的东西?
library(dplry)
mydf %>%
mutate(across(Q1:Q2,~ +(. %in% answer_key)))
Q1 Q2 ID
1 1 0 P1
2 0 1 P2
3 0 0 P3
4 0 0 P4
5 0 1 P5
或者基本 R 有点困惑:
mydf[,c("Q1","Q2")] <- sapply(mydf[,c("Q1","Q2")],function(x) +(x%in%answer_key))
mydf
Q1 Q2 ID
1 1 0 P1
2 0 1 P2
3 0 0 P3
4 0 0 P4
5 0 1 P5
关于在 R 中使用列表替换值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67039293/