【问题标题】:How to conditionally subset data by repeated group ID in R如何通过R中的重复组ID有条件地对数据进行子集化
【发布时间】:2018-08-16 04:24:19
【问题描述】:

我有一个 Id 编号出现在多个时间点的数据集。

我想选择在第 1-6 个月、第 7-12 个月、13-18、19-24、25-31、第 31-36 个月中至少存在一次的 ID。

例如

id <- c('D1','D1','D2','D3','D3','D3','D4','D5','D6','D1','D1','D1')
month <- c(1,2,1,1,2,1,3,3,3,2,4,5)
cbind(id, month)
       id  month
 [1,]  D1     1
 [2,]  D1     2
 [3,]  D2     1
 [4,]  D3     1
 [5,]  D3     2
 [6,]  D3     1
 [7,]  D4     3
 [8,]  D5     3
 [9,]  D6     3
[10,]  D1     2
[11,]  D1     4
[12,]  D1     5

我想选择存在于第 1-3 个月和第 4-6 个月的 ID。在这种情况下,我只想要 D1。

【问题讨论】:

标签: r group-by conditional subset subset-sum


【解决方案1】:
df <- data.frame("id" = id, "month" = month)
intersect(unique(df$id[which(is.element(df$month, 1:3))]), #IDs w/ month 1-3
          unique(df$id[which(is.element(df$month, 4:6))])  #IDs w/ month 4-6
          )

有输出

> intersect(unique(df$id[which(is.element(df$month, 1:3))]),
+           unique(df$id[which(is.element(df$month, 4:6))])
+           )
[1] "D1"

【讨论】:

  • 我喜欢这种逻辑,但不要这样做data.frame(cbind(...)),因为您最终会将所有数字强制转换为字符。只需data.frame(...) 即可。
  • @thelatemail 没错,我也注意到了。我可能应该编辑它。
猜你喜欢
  • 2016-02-12
  • 1970-01-01
  • 1970-01-01
  • 2014-02-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多