【发布时间】:2015-12-28 19:32:47
【问题描述】:
假设我从包含 10 行的数据框中随机抽取 3 行:
df <- data.frame(col1 = sample(letters, 10), col2 = sample(letters, 10))
> df
col1 col2
1 q f
2 i c
3 y l
4 k y
5 s e
6 w k
7 o x
8 e t
9 d a
10 c g
df_samp <- sample_n(df, 3)
## (sample_n is a dplyr function)
> df_samp
col1 col2
6 w k
2 i c
1 q f
然后如何查找或调用刚刚采样的行的索引? (在本例中为第 6、2 和 1 行)。例如,我想从原始数据框 df 中删除或修改这三行。我试图匹配实际数据
df <- df[-which(df$col1 == df_samp$col1 & df$col2 == df_samp$col2), ]
,这不仅不优雅,甚至不起作用(错误:“较长的对象长度不是较短对象长度的倍数”)。
【问题讨论】:
-
看看
df_samp的行名。您可以使用rownames(df_samp)退回它们。您可以使用df[-as.numeric(rownames(df_samp)), ]从原始df中删除这些行 -
或者你可以直接采样行索引
pick<-sample(nrow(df),3)。然后获取选择df[pick,]或者直接省略选择df[-pick,]。
标签: r