【问题标题】:subset dataframe based on rownames基于行名的子集数据框
【发布时间】:2017-10-08 07:33:37
【问题描述】:

我有两个数据框(bwenvbwsp)。 bwspbwenv 的子集,它们具有匹配的行名(样本 id)。我想对bwenv 进行子集化,以便它只包括在bwsp 中也找到的行。

当行数匹配时,我用过:

bw2015

用组合数据创建一个新的数据框。

我的问题与这里提出的问题非常相似:R subset a column in data frame based on another data frame/list,但子集是由每个数据帧中的一列数据完成的(而不是像我想要的那样的行名)。

【问题讨论】:

    标签: r


    【解决方案1】:
    library(dplyr)
    
    bw2015 <- bwenv %>% 
      add_rownames("row_names") %>%
      semi_join(add_rownames(bwsp, "row_names"), by = "row_names")
    

    【讨论】:

    • 谢谢!完成此操作后,我可以将第一列重新分配回行名。
    • 是的。 rownames(bw2015) &lt;- bw2015$row_names 然后bw2015 &lt;- bw2015 %&gt;% select(-row_names)
    • 哦,我想我在你最初的解决方案之后说得太早了。我收到一条错误消息:Warning message: Deprecated, use tibble::rownames_to_column() instead.
    【解决方案2】:

    根据@yeedle 的解决方案,我对其进行了一些修改,发现这对我有用:

    library(dplyr)
    bwenv2 <- bwenv %>% 
      rownames_to_column("row_names") %>%
      semi_join(rownames_to_column(bwsp, "row_names"), by = "row_names")
    rownames(bwenv2) <- bwenv2$row_names 
    bwenv2 <- bwenv2 %>% select(-row_names)
    
    bw2015 <- cbind(bwenv2, bwsp)
    str(bw2015)
    

    【讨论】:

      猜你喜欢
      • 2021-09-02
      • 2014-03-07
      • 1970-01-01
      • 1970-01-01
      • 2020-11-21
      相关资源
      最近更新 更多