![](/img/trans.png)
[英]compute row-wise summary statistics such as mean, max, min across columns sharing similar names using dplyr
[英]Row-wise summary statistics using mutate and colnames (using dplyr)
我想在 R 中执行逐行汇总统计。
我尝试调整此解决方案( https://stackoverflow.com/a/68443762/3251466 )以使用均值,但得到了奇怪的结果。
df1 <- tibble(foo = c(1,5,2), bar = c(10,1,3), foobar = c(6,3,5))
df1 %>% rowwise() %>% mutate(s = sum(!!!syms(colnames(.)))) #works
df1 %>% rowwise() %>% mutate(m = mean(!!!syms(colnames(.)))) #just returns foo
df1 %>% rowwise() %>% mutate(sd = sd(!!!syms(colnames(.)))) #fails
# Attempting with an NA
df2 <- tibble(foo = c(1,5,2), bar = c(10,NA,3), foobar = c(6,3,5))
df2 %>% rowwise() %>% mutate(s = sum(!!!syms(colnames(.)), na.rm=T)) #works
df2 %>% rowwise() %>% mutate(m = mean(!!!syms(colnames(.)), na.rm=T)) #this time mean fails
知道为什么这会失败吗?
我认为 apply 和 rowMeans 之类的东西会起作用(我还没有研究这些)。
不过,我希望有一种比 rowMeans 更通用的方法,以便我可以执行其他逐行分析,并且很好奇是否有更整洁的替代方法可以应用。
谢谢!
您可以采用的执行逐行操作的通用方法是通过c_across
即
df1 |> rowwise() %>% mutate(s=sum(c_across()))
df1 |> rowwise() %>% mutate(m=mean(c_across()))
df1 |> rowwise() %>% mutate(sd=sd(c_across()))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.