【问题标题】:Subsetting by factors in R loopR循环中的因子子集
【发布时间】:2011-11-07 05:59:31
【问题描述】:

我很难通过 for 循环中的因素对我的数据进行子集化。这是一个说明性示例:

x<-rnorm(n=40, m=0, sd=1)
y<-rep(1:5, 8)
df<-as.data.frame(cbind(x,y))
df_split<-split(df, df$y)
mean_vect<-rep(-99, 5)

for (i in c(1:5)) {
current_df<-df_split$i
mean_vect[i]<-mean(current_df)
}

`

这种方法不起作用,因为我认为 R 正在寻找一个名为“i”的拆分,而我真的希望它拉出第 i 个拆分!我也很高兴地尝试了子集函数。当我尝试根据非数字因素进行拆分时,我总是会遇到这些问题,因此我们将不胜感激

【问题讨论】:

    标签: r loops split subset


    【解决方案1】:

    仅供参考,通常使用tapply 完成此功能

    tapply( df$x, df$y, mean )
    

    第一个参数指定要“平均组”的值。第二个只是索引,即拆分组的变量,最后一个显然是您要在这些组上运行的函数,在这种情况下是平均值。

    【讨论】:

    • ran2,编写的示例与 Ruth 的问题数据相匹配,不需要进一步的示例。我留下了你的澄清句。
    【解决方案2】:

    获取拆分号i运行

    df_split[[i]]
    

    顺便说一句,你的最终目标是mean_vect你最好使用

    mean_vect <- lapply(df_split, mean)
    

    或:

    mean_vect <- tapply(df$x, df$y, mean)
    mean_vect
            1          2          3          4          5 
    0.2566810 -0.1528079 -0.2097333 -0.1540343  0.3609312 
    

    【讨论】:

      猜你喜欢
      • 2014-02-20
      • 2021-06-23
      • 1970-01-01
      • 1970-01-01
      • 2020-12-07
      • 1970-01-01
      • 1970-01-01
      • 2019-03-14
      • 1970-01-01
      相关资源
      最近更新 更多