我想找到创建新变量的最有效方法。假设我有这个数据框:
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))
有没有一种方法,而无需重新使用数据框然后填充?这似乎很麻烦。谢谢!
答案 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