如果一个观察满足标准,则为新变量填充其他具有相同值的值

时间:2016-12-06 09:56:21

标签: r

我有像这样的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"))

1 个答案:

答案 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"))