如何正确使用dplyr的rowwise函数计算跨行均值?
问题解答
你原来代码出错的核心原因是:a1:a3在逐行运算的语境中,并不会自动选取a1、a2、a3三个列的当前行值,而是生成了从a1取值到a3取值的整数序列,对该序列求平均的结果自然和预期的行均值不符。
dplyr的rowwise()行分组模式下,需要搭配c_across()函数实现多列的行维度选取,正确写法如下:
library(dplyr) set.seed(123) mydf <- tibble( a1 = floor(rnorm(10, 5, 2)), a2 = floor(rnorm(10, 6, 3)), a3 = floor(rnorm(10, 8, 3)) ) # 正确写法1:指定列范围计算行均值 mydf %>% rowwise() %>% mutate(allmeanrow = mean(c_across(a1:a3))) %>% ungroup() # 计算完成后取消行分组,避免影响后续操作 # 正确写法2:对所有列计算行均值 mydf %>% rowwise() %>% mutate(allmeanrow = mean(c_across(everything()))) %>% ungroup()
上述两种写法的运行结果和你给出的rowMeans(.)预期结果完全一致。
内容的提问来源于stack exchange,提问作者Moses
相关产品推荐
相关产品推荐

