【问题标题】:how to call the index of randomly sampled rows?如何调用随机采样行的索引?
【发布时间】: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&lt;-sample(nrow(df),3)。然后获取选择df[pick,]或者直接省略选择df[-pick,]

标签: r


【解决方案1】:

给定一个样本:

> df_samp
  col1 col2
7    t    j
8    a    w
3    k    y

您可以通过选择所有行名称来进行子集化,但随机样本中的行名称除外:

> df[ -as.numeric(rownames(df_samp)), ]
   col1 col2
1     g    p
2     u    g
4     d    c
5     f    k
6     r    m
9     n    h
10    o    x

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-06-04
    • 1970-01-01
    • 1970-01-01
    • 2019-09-17
    • 2018-06-11
    • 1970-01-01
    • 1970-01-01
    • 2015-09-02
    相关资源
    最近更新 更多