dplyr中分组子集的访问
我感觉这已经被问了好几次了,但我不能在我的情况下运行它。不知道为什么 我通过我的数据框对_进行分组,并根据数值计算出一个dplyr中分组子集的访问,r,dplyr,R,Dplyr,我感觉这已经被问了好几次了,但我不能在我的情况下运行它。不知道为什么 我通过我的数据框对_进行分组,并根据数值计算出一个平均值。此外,我标记了一个特定的行,我想用子集突出显示的行的值计算新计算的平均值的比率 library(dplyr) df <- data.frame(int=c(5:1,4:1), highlight=c(T,F,F,F,F,F,T,F,F), exp=c('a','a','a','a','a','b'
平均值。此外,我标记了一个特定的行,我想用子集突出显示的行的值计算新计算的平均值的比率
library(dplyr)
df <- data.frame(int=c(5:1,4:1),
highlight=c(T,F,F,F,F,F,T,F,F),
exp=c('a','a','a','a','a','b','b','b','b'))
df %>%
group_by(exp) %>%
summarise(mean=mean(int),
l1=nrow(.),
ratio_mean=.[.$highlight, 'int']/mean)
这项工作:
df %>%
group_by(exp) %>%
summarise(mean = mean(int),
l1 = n(),
ratio_mean = int[highlight] / mean)
但是你的解决方案出了什么问题
nrow(.)
统计整个输入数据帧的行数,而n()
只统计每组的行数
[.$highlight,'int']/mean
这里再次使用highlight列使用整个输入数据帧和子集,但它被正确的组平均值除以。实际上,您在这里返回两个值,因为原始df的两行有一个highlight=TRUE
。这会导致一个讨厌的NA
-列名李>
为了保存它,我们可以使用@MikkoMarttila建议的do()
,但这有点笨拙:
df %>%
group_by(exp) %>%
do(summarise(., mean = mean(.$int),
l1 = nrow(.),
ratio_mean = .$int[.$highlight] / mean))
原始输出
df %>%
group_by(exp) %>%
summarise(mean=mean(int),
l1=nrow(.),
ratio_mean=.[.$highlight, 'int']/mean)
# A tibble: 2 x 4
# exp mean l1 ratio_mean$ NA
# <fct> <dbl> <int> <dbl> <dbl>
# 1 a 3 9 1.67 2
# 2 b 2.5 9 1 1.2
df%>%
分组依据(exp)%>%
总结(平均值=平均值(整数),
l1=nrow(.),
比率_平均值=[.$highlight,'int']/平均值)
#一个tibble:2x4
#exp平均l1比率\u平均$NA
#
#1A391.672
#2 b 2.5 9 1.2
使用n()
计算子组中的行数
指的是管道输入,即您可以使用的整个数据集do()
:其中,
将指的是子集数据帧。请参见,例如,如何访问子集而不是输入?或者我是否需要按突出显示分组,并使用%>%计算平均值分组按(exp)%>%总结(平均值=平均值(int))
?您可以这样做:比率\u平均值=int[突出显示]/mean
啊哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈!)谢谢,不知何故,我没有意识到在摘要中,我可以直接评估专栏…:-)可能是今天太早了;-)
df %>%
group_by(exp) %>%
summarise(mean=mean(int),
l1=nrow(.),
ratio_mean=.[.$highlight, 'int']/mean)
# A tibble: 2 x 4
# exp mean l1 ratio_mean$ NA
# <fct> <dbl> <int> <dbl> <dbl>
# 1 a 3 9 1.67 2
# 2 b 2.5 9 1 1.2