使用R

时间:2016-05-16 02:17:58

标签: r dataframe

我的数据框看起来像这样:

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

不确定如何处理此问题?谢谢

3 个答案:

答案 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