2017-05-09 127 views
0

我有兩個數據幀(bwenvbwsp)。 bwspbwenv的子集,它們具有匹配的rownames(樣本ID)。我想要子集bwenv,以便它只包括也在bwsp中找到的行。基於rownames的子集數據框

當行的數量相匹配,我使用:

bw2015 < - cbind(bwenv,bwsp)

創建與組合的數據的新數據幀。

我的問題與此處提出的問題非常相似:R subset a column in data frame based on another data frame/list,但子集是由每個數據框中的一列數據(而不是像我想要的那樣的行名稱)完成的。

回答

0
library(dplyr) 

bw2015 <- bwenv %>% 
    add_rownames("row_names") %>% 
    semi_join(add_rownames(bwsp, "row_names"), by = "row_names") 
+0

謝謝!做完這些之後,我可以將第一列重新分配到行名稱中。 – ayesha

+0

是的。 'rownames(bw2015)< - bw2015 $ row_names'然後'bw2015 < - bw2015%>%select(-row_names)' – yeedle

+0

噢,我想我在您的初始解決方案後過早發言。我收到一條錯誤消息:「警告消息: 已棄用,請改用tibble :: rownames_to_column()。 ' – ayesha

0

從@ 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)