分组定义新变量,条件是另一个变量的值

时间:2018-08-12 15:10:11

标签: r dplyr

我想找到创建新变量的最有效方法。假设我有这个数据框:

set.seed(1234)
df <- data.frame(group = c(rep(1,4), rep(2,4)), X = rep(1:4, 2), G = sample(1:10, 8, replace = T) )

我想创建一个新变量,该变量是每个组中G的平均值,条件是X等于1或2。在示例df中,新变量将具有以下值:

df$newvar <- c(rep(4.5, 4), rep(8, 4))

有没有一种方法,而无需重新使用数据框然后填充?这似乎很麻烦。谢谢!

1 个答案:

答案 0 :(得分:4)

按“ group”分组后,根据“ X”上的逻辑条件filter个“ G”元素,并获得这些值的mean个,用{{1}创建一个新列}

mutate

或使用library(dplyr) df %>% group_by(group) %>% mutate(newvar = mean(G[X %in% 1:2])) # A tibble: 8 x 4 # Groups: group [2] # group X G newvar # <dbl> <int> <int> <dbl> #1 1 1 2 4.5 #2 1 2 7 4.5 #3 1 3 7 4.5 #4 1 4 7 4.5 #5 2 1 9 8 #6 2 2 7 8 #7 2 3 1 8 #8 2 4 3 8 中的ave

base R