我有一个如下所示的数据框。
> dput(head(wp_data_ensembl))
structure(list(wpid = c("WP3633", "WP3633", "WP3633", "WP694",
"WP694", "WP694"), gene = c("ENSG00000156006", "ENSG00000156006",
"ENSG00000156006", "ENSG00000156006", "ENSG00000156006", "ENSG00000156006"
), wpid = c("WP702", "WP694", "WP3633", "WP702", "WP694", "WP3633"
), name = c("Metapathway biotransformation Phase I and II", "Arylamine metabolism",
"Caffeine and Theobromine metabolism", "Metapathway biotransformation Phase I and II",
"Arylamine metabolism", "Caffeine and Theobromine metabolism"
)), row.names = c(NA, 6L), class = "data.frame")
数据框包含两列,均名为wpid。我想子集所有行,其中两列都具有相同的字符串。
例如以下几行中的内容。
wpid gene wpid name
1 WP3633 ENSG00000156006 WP702 Metapathway biotransformation Phase I and II
2 WP3633 ENSG00000156006 WP694 Arylamine metabolism
3 WP3633 ENSG00000156006 WP3633 Caffeine and Theobromine metabolism
仅第三行应保留在新数据框中。
任何帮助都是最欢迎的。
答案 0 :(得分:2)
由于列名相同(虽然不建议使用),所以我们可以先使用索引group_by_at
,然后再使用filter
library(dplyr)
df1 %>%
group_by_at(1:3) %>%
slice(n())
如果我们需要filter
两个列都相同的所有实例,请将列名更改为unique
,因为重复名称在管道中不起作用,只会造成混乱,然后执行filter
df1 %>%
set_names(make.unique(names(.))) %>%
filter(wpid == wpid.1)
答案 1 :(得分:1)
您进行矢量比较。在R中,这是隐式的。自己尝试一下:
wp_data_ensembl[,1] == wp_data_ensembl[,3]
[1] FALSE FALSE TRUE FALSE TRUE FALSE
然后,您可以使用逻辑向量(从上一行返回的对象进行子集设置:
wp_data_ensembl[wp_data_ensembl[,1] == wp_data_ensembl[,3], ]