复制数据等于某个值的行并重复n次

时间:2013-09-16 03:34:27

标签: r

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

2 个答案:

答案 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