2

我有一个包含 15 列和 75,000 行的数据框。第 1 列大约有 25,000 个唯一值。

我想要一个从中复制的新数据框,其中第 1 列中的值出现 365 次,第 10 列和第 11 列中的值不等于 -999。

较小的例子:

df <- data.frame(a=c(1,1,1,2,2,2,3,3,4), b=c(4,5,6,4,5,6,4,5,6), c=c(7,8,9,-999,8,9,7,8,9),d=c(2,3,4,2,3,-999,2,3,4))
  a b    c    d
1 1 4    7    2
2 1 5    8    3
3 1 6    9    4
4 2 4 -999    2
5 2 5    8    3
6 2 6    9 -999
7 3 4    7    2
8 3 5    8    3
9 4 6    9    4

例如,我希望在 a 列中显示 3 次 (1,2,3) 并且在 c 或 d 列中没有 -999 的值。

  a b    c    d
1 1 4    7    2
2 1 5    8    3
3 1 6    9    4

我试过使用类似的东西,tmp <- table(df[df$c != -999,"a"])但这只会给我频率。我怎样才能将数据复制出来?

4

2 回答 2

2

你已经成功了一半。首先,将频率大于 3 的名称子集化,然后找出df$a这些名称中的所有元素:

tmp3 <- names(tmp)[tmp >= 3]
df[df$a %in% tmp3,]

  a b c d
1 1 4 7 2
2 1 5 8 3
3 1 6 9 4
于 2013-09-16T03:54:40.907 回答
2

这可能是data.table清楚地表达选择参数的应用的一个很好的例子:

library(data.table)
df <- data.table(df)
df[,if(.N>=3 & !any(c==-999)) .SD, by=a]

结果:

   a b c d
1: 1 4 7 2
2: 1 5 8 3
3: 1 6 9 4
于 2013-09-16T04:10:12.937 回答