这应该可以做到
require(dplyr)
df <- data.frame(id = as.factor(c(1,1,1,2,2,3,4,4)),
partner = c(1,2,3,1,2,1,1,2),
kiss = as.factor(c("Yes", "No", "No", "No", "No", "Yes", "Yes", "No")))
df_new <- df %>%
group_by(id) %>%
mutate("neverkiss" = {if (any(kiss == "Yes")) "No" else "Yes"})
df_new
如果新列应包含您必须的因素ungroup
first
df_new <- df %>%
group_by(id) %>%
mutate("neverkiss" = {if (any(kiss == "Yes")) "No" else "Yes"}) %>%
ungroup() %>%
mutate("neverkiss" = as.factor(neverkiss))
class(df_new$neverkiss)
[1] "factor"
原因是因素不能结合:
a <- as.factor(c("Yes", "Yes", "Yes"))
b <- as.factor(c("No", "No", "No"))
c(a, b) # meaningless
由于分组仍处于活动状态mutate
基本上是构建向量neverkiss
作为每个向量的组合id
(组),这会产生一个只有一个级别的向量(在本例中为“否”)。