我的数据框看起来像这样:
df <- data.frame(entrez = c(1:10, 1), entrez_HS = c(11:19, 19, 20))
entrez entrez_HS
1 1 11
2 2 12
3 3 13
4 4 14
5 5 15
6 6 16
7 7 17
8 8 18
9 9 19
10 10 19
11 1 20
我还有df$entrez_HS
中存在的值向量:
entrez_HS <- c(11, 11, 12, 19, 19)
对于entrez_HS
中的每个值,我想要df
的行df$entrez_HS
等于该值。 entrez_HS
中的重复条目应导致重复的行。以下是我对上述df
所期望的结果:
entrez entrez_HS
1 1 11
2 1 11
3 2 12
4 9 19
5 10 19
6 9 19
7 10 19
不确定如何处理此问题?谢谢
答案 0 :(得分:4)
merge
数据汇总在一起:
merge(mget("entrez_HS"), df, by="entrez_HS")
#or
merge(data.frame(entrez_HS), df, by="entrez_HS")
# entrez_HS entrez
#1 11 1
#2 11 1
#3 12 2
#4 19 9
#5 19 10
#6 19 9
#7 19 10
答案 1 :(得分:1)
不使用任何包,我们可以试试这个:
# Create data
df <- data.frame(entrez = c(1:10, 1), entrez_HS = c(11:19, 19, 20))
entrez_HS <- c(11, 11, 12, 19, 19)
# Extract information, then collect it
result <- lapply(entrez_HS, function(i) df[df$entrez_HS==i,])
result <- do.call("rbind", result)
答案 2 :(得分:1)
这是另一个选项
rbind(df[match(entrez_HS, df$entrez_HS),],
df[duplicated(df$entrez_HS)|duplicated(df$entrez_HS,
fromLast=TRUE),])
# entrez entrez_HS
#1 1 11
#1.1 1 11
#2 2 12
#9 9 19
#9.1 9 19
#91 9 19
#10 10 19
或使用dplyr
library(dplyr)
left_join(data_frame(entrez_HS), df)
# entrez_HS entrez
# <dbl> <dbl>
#1 11 1
#2 11 1
#3 12 2
#4 19 9
#5 19 10
#6 19 9
#7 19 10