我有像这样的data.frame
test <- data.frame(plot = c(1, 1, 2, 2, 3, 3), sort = c(10, 20, 11, 12, 15, 20))
如果treat
中的任何"A"
为sort
,我想创建一个名为plot
的新变量20
。否则它应该是B
。
预期的输出是
data.frame(plot = c(1, 1, 2, 2, 3, 3), sort = c(10, 20, 11, 12, 15, 20), treat = c("A", "A", "B", "B", "A", "A"))
答案 0 :(得分:1)
我们可以使用ave
并按plot
变量分组。检查是否有sort
变量的值为20,并相应地分配组
test$treat<-ave(test$sort,test$plot,FUN =function(x) ifelse(any(x ==20),"A","B"))
test
# plot sort treat
#1 1 10 A
#2 1 20 A
#3 2 11 B
#4 2 12 B
#5 3 15 A
#6 3 20 A
与dplyr
library(dplyr)
test %>%
group_by(plot) %>%
mutate(treat = ifelse(any(sort == 20), "A", "B"))