【发布时间】:2023-01-04 22:26:16
【问题描述】:
我有一个 df,其中每一行都是一个问题,最多有 7 个答案(列),包括少数 NA。我想找到每个问题最常给出的答案及其百分比(并在有联系时返回 NA)。最终,我希望找到在答案和相应答案中达成共识 >70% 的问题。
我的数据如下所示:
dat <- data.frame(rbind(A=c("Dog", "Dog", "Cat", "Dog","Dog", "Dog", "Cat"),
B=c("Dog", "Cat", "Cat", "Cat", "Cat", "Cat", "Cat"),
C=c("Cat", "Fox", "Fox", "Fish", "Dog", "Mouse", "Rat"),
D=c("Mouse", "Mouse", "Mouse", "Mouse", "Mouse", "Mouse", "Mouse"),
E=c("Pigeon", "Pigeon", "Seagull", "Pigeon", "Seagull", "Seagull", "Pigeon"),
G=c("Fox", "Fox", "Fox", NA, "Dog", "Dog", "Dog")))
我知道我可以使用 which.max() 找到最常见的字符串:
dat$answer <- apply(dat,1,function(x) names(which.max(table(x))))
但是,我的目标是得到这样的结果(我只能保留最终答案,并达成 >.7 的共识)
output <- data.frame(cbind(dat[, 1:7],
rbind(A=c("Dog", .71),
B=c("Cat", .86),
c=c("Fox", .28),
D=c("Mouse", 1),
E=c("Pigeon", .57),
G=c(NA, NA))))
colnames(output) <- c("X1", "X2", "X3", "X4", "X5", "X6", "X7", "Answer", "Perc")
非常感谢所有帮助!干杯。
【问题讨论】: