【问题标题】:Removing Rows Based on Not Enough Repeated Data in a Large Data Set in R基于R中大型数据集中没有足够的重复数据删除行
【发布时间】:2015-07-17 02:24:47
【问题描述】:

我希望对大量数据进行 4 天滚动平均值。问题是有些人没有 4 个案例,因此我收到一个错误,表明 k

有没有办法删除数据集中没有足够数据的任何个人?

以下是数据外观的示例:

     Name  variable.1
1     Kim   64.703950
2     Kim  926.339849
3     Kim  128.662977
4     Kim  290.888594
5     Kim  869.418523
6     Bob  594.973849
7     Bob  408.159544
8     Bob  609.140928
9  Joseph  496.779712
10 Joseph  444.028668
11 Joseph -213.375635
12 Joseph  -76.728981
13 Joseph  265.642784
14   Hank  -91.646728
15   Hank  170.209746
16   Hank   97.889889
17   Hank   12.069074
18   Hank  402.361731
19   Earl  721.941796
20   Earl    4.823148
21   Earl  696.299627

【问题讨论】:

    标签: r dataframe dataset


    【解决方案1】:

    您可以创建第二个 data.frame 聚合到用户级别,并为每个用户计算一个计数。然后由用户将该 data.frame 加入到原始数据中,然后将新的 data.frame 子集到 count >= 4

    【讨论】:

      【解决方案2】:

      试试:

      library(zoo)
      library(dplyr)
      df %>%
        group_by(Name) %>%
        filter(n() >= 4) %>%
        mutate(daymean = rollmean(variable.1, 4, align="right", na.pad=TRUE))
      

      这只会使组数大于或等于 4,并计算 variable.1 的 4 天滚动平均值。

      #     Name variable.1  daymean
      #1     Kim   64.70395       NA
      #2     Kim  926.33985       NA
      #3     Kim  128.66298       NA
      #4     Kim  290.88859 352.6488
      #5     Kim  869.41852 553.8275
      #6  Joseph  496.77971       NA
      #7  Joseph  444.02867       NA
      #8  Joseph -213.37563       NA
      #9  Joseph  -76.72898 162.6759
      #10 Joseph  265.64278 104.8917
      #11   Hank  -91.64673       NA
      #12   Hank  170.20975       NA
      #13   Hank   97.88989       NA
      #14   Hank   12.06907  47.1305
      #15   Hank  402.36173 170.6326
      

      【讨论】:

        【解决方案3】:

        这里有两个基本选项,一个是ave,我们为组中的每一行生成一个向量,该向量具有该组的长度(ave 将回收其结果以填充一个组):

        subset(DF, ave(seq(Name), Name, FUN=length) > 4)
        

        另一个是table,我们计算每个组中的项目并使用%in% 只保留属于具有足够项目的组的行。

        subset(DF, Name %in% names(table(Name)[table(Name) > 4]))
        

        两者都产生:

             Name variable.1
        1     Kim   64.70395
        2     Kim  926.33985
        3     Kim  128.66298
        4     Kim  290.88859
        5     Kim  869.41852
        9  Joseph  496.77971
        10 Joseph  444.02867
        11 Joseph -213.37563
        12 Joseph  -76.72898
        13 Joseph  265.64278
        14   Hank  -91.64673
        15   Hank  170.20975
        16   Hank   97.88989
        17   Hank   12.06907
        18   Hank  402.36173
        

        【讨论】:

        • 这是一个简单的解决方案。谢谢。
        【解决方案4】:

        如果您的数据框是df,您可以删除所有使用dplyr 出现少于4 次的名称:

        library(dplyr)
        
        df %>%
          group_by(Name) %>%
          filter(n() >= 4)
        

        【讨论】:

        • 完美运行。谢谢!
        • 您可能会发现 this introductiondplyr 有用的读物​​。
        • 谢谢。 dplyr 似乎是一个非常有用的软件包。这将帮助我熟悉它。
        猜你喜欢
        • 1970-01-01
        • 2023-03-13
        • 2023-01-20
        • 2013-08-27
        • 1970-01-01
        • 2019-05-20
        • 2017-01-16
        • 1970-01-01
        • 2020-04-03
        相关资源
        最近更新 更多