我有一个包含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"])
这样的东西,但这只能给我一个频率。如何复制数据?
答案 0 :(得分: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
答案 1 :(得分: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