【问题标题】:How to select every 5 other observations in R? [duplicate]如何在 R 中选择每 5 个其他观察值? [复制]
【发布时间】:2016-09-24 08:54:31
【问题描述】:

我有一个数据集,其中包含 10 个“房屋”,每天每分钟都有能源生产。像这样:

HouseID Time KwH
1       1    X
2       1    X
3       1    X
4       1    X
5       1    X
6       1    X
7       1    X
8       1    X
9       1    X
10      1    X
1       2    X
2       2    X
3       2    X
4       2    X
5       2    X
6       2    X
7       2    X
8       2    X
9       2    X
10      2    X

我想删除 houseID 为 6 到 10 的行,这样我就只剩下 houseID 为 1、2、3、4 和 5 的观察结果了。

【问题讨论】:

    标签: r select


    【解决方案1】:

    假设 df 是您的数据框的名称,那么只需使用以下内容:

    df2 <- subset(df, df$HouseID==1:5)
    

    【讨论】:

    • 实际上,这不会像您期望的那样工作。 %in% 是您进行这种比较所需要的。而且你不需要重复df$:subset(df, HouseID %in% 1:5)。与@RHertel 的差别不大,但差别不大(因为你是包含而不是排除,并且使用subset 而不是[-indexing)...
    • 如果你很幸运,这将起作用:它依赖于 (1) 房屋 ID 在数据框中的顺序和 (2) 房屋总数是长度的偶数倍子集并定期重复到该数字。 OP 的样本数据符合这些标准,但这不是通用解决方案。
    【解决方案2】:

    你可以试试

    newdf <- df1[!df1$HouseID %in% 6:10,]
    #   HouseID Time KwH
    #1        1    1   X
    #2        2    1   X
    #3        3    1   X
    #4        4    1   X
    #5        5    1   X
    #11       1    2   X
    #12       2    2   X
    #13       3    2   X
    #14       4    2   X
    #15       5    2   X
    

    数据

    df1 <- structure(list(HouseID = c(1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 
          10L, 1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L), Time = c(1L, 1L, 
          1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
           2L, 2L), KwH = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
           1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), .Label = "X", 
           class = "factor")), .Names = c("HouseID", "Time", "KwH"), 
           class = "data.frame", row.names = c(NA, -20L))
    

    【讨论】:

      猜你喜欢
      • 2021-02-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-17
      • 1970-01-01
      • 2013-12-03
      • 2014-07-08
      相关资源
      最近更新 更多