2017-05-09 125 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)