Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
dplyr中分组子集的访问_R_Dplyr - Fatal编程技术网

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