【问题标题】:Select subset of dataframe by non-unique ids通过非唯一 id 选择数据帧的子集
【发布时间】:2010-04-02 19:50:20
【问题描述】:

假设我有一个像这样的数据框:

df <- data.frame (id = c("a", "b", "a", "c", "e", "d", "e"), n=1:7)

还有一个 id 像这样的向量:

v <- c("a", "b")

如何选择与 v 中的 id 匹配的数据框行?我不能将 id 列用于行名,因为它们不是唯一的。当我尝试这样做时,我得到:

 rownames(df) <- df[["id"]]
Error in `row.names<-.data.frame`(`*tmp*`, value = c(1L, 2L, 1L, 3L, 5L,  : 
  duplicate 'row.names' are not allowed
In addition: Warning message:
non-unique values when setting 'row.names': ‘a’, ‘e’ 

【问题讨论】:

    标签: r selection


    【解决方案1】:

    使用

    df[df$id %in% v,]
    

    【讨论】:

      【解决方案2】:

      这应该做你想做的:

      ndx = which(df$id %in% v)
      df[ndx,]
      

      【讨论】:

      • 很明显,SO 需要的是专家的障碍时钟,比如 45 秒左右,您的答案在发布之前就放在服务器上 - 尽管大多数情况下即使这样也无济于事. :)
      • 我只是在等 marek 过来告诉我们我们忘记了 NA 值...
      • 在实践中,为了处理 v 和 id 列中的 na 值,我使用了这个:df[df$id %in% v[!is.na(v)],]。
      • 我来了...实际上%in%NA 相处得很好。它将与NA 匹配任何其他值(无论两个向量中的哪一个包含NA's)。换句话说,NA %in% NA 返回TRUE
      • @Marek:哈!我开始担心了。
      猜你喜欢
      • 2016-01-11
      • 1970-01-01
      • 2018-07-31
      • 2020-05-04
      • 1970-01-01
      • 2018-10-07
      • 1970-01-01
      • 2020-04-03
      • 1970-01-01
      相关资源
      最近更新 更多