从数据框中抽取合格的样本

时间:2018-09-24 07:30:20

标签: r

我想从数据框中绘制随机的行样本;但是,并非所有行都应包括在绘图中,而应包括满足否定条件的行:它们与第二个数据帧中的某个变量不匹配。 这是一些模拟数据:

 df1 <- data.frame(
  x = c("A", "B", "L", "G", "C", "F", "S", "J", "G", "K", "X", "Y", "B", "C", "Z")
)

df2 <- data.frame(
  a = LETTERS[1:5],
  b = 1:5
)

我想从中提取样本的数据框是df1。抽奖应排除df1 $ x中与df2第一列(df2$a)中的数据点匹配的那些数据点。到目前为止,我已经尝试过:

df1[sample(1:nrow(df2[-(match(df1$x, df2$a))]), 7, replace = F), ]

给出错误信息;我已经尝试过了:

df1[sample(1:nrow(df2[!match(df1$x, df2$a),]), 7, replace = F), ]

不会给出错误,但是包含不需要的数据。有解决方案吗?

1 个答案:

答案 0 :(得分:1)

我们可以通过使用df1$xdf2$a中不存在的索引中提取which中的行,然后从这些索引中提取sample来排除行。

df1[sample(which(!df1$x %in% df2$a), 7), ,drop = FALSE]

#   x
#7  S
#15 Z
#8  J
#9  G
#3  L
#12 Y
#6  F