我想从数据框中绘制随机的行样本;但是,并非所有行都应包括在绘图中,而应包括满足否定条件的行:它们与第二个数据帧中的某个变量不匹配。 这是一些模拟数据:
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), ]
不会给出错误,但是包含不需要的数据。有解决方案吗?
答案 0 :(得分:1)
我们可以通过使用df1$x
在df2$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