R 以另一个变量的值为条件,通过分组的方式创建一个新变量
我想找到创建新变量的最有效方法。假设我有这个数据框:R 以另一个变量的值为条件,通过分组的方式创建一个新变量,r,dplyr,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) ) set.seed(1234) df按“组”分组后,根据“X”上的逻辑条件过滤“G”元素,并获得这些值的平均值,以创建带有mutate library(dplyr) df %>% group_by
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) )
set.seed(1234)
df按“组”分组后,根据“X”上的逻辑条件过滤“G”元素,并获得这些值的平均值
,以创建带有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
按“组”分组后,根据“X”上的逻辑条件过滤“G”元素,并获取这些值的平均值
,以创建带有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
哇!这是一个非常好的技巧,NA^(!X%in%1:2)
。我不知道有一个。@RuiBarradas使用ave
,我们需要参数具有相同的长度,因此必须求助于一些不常见的参数ave(替换(df$G,!df$X%in%1:2,NA),df$group,FUN=function(X)mean(X,NA.rm=TRUE))
哇!这是一个非常好的技巧,NA^(!X%in%1:2)
。我不知道有一个。@RuiBarradas使用ave
,我们需要参数具有相同的长度,因此必须求助于一些异常的参数ave(替换(df$G,!df$X%in%1:2,NA),df$group,FUN=function(X)mean(X,NA.rm=TRUE))
df$newvar <- with(df, ave(G * NA^(!X %in% 1:2), group,
FUN = function(x) mean(x, na.rm = TRUE)))