子集(查询)数据帧保留R中的顺序

时间:2016-12-21 15:20:06

标签: r dataframe subset

我想知道一种使用[]进行子集化的方法,它保留了查询的顺序(作者),例如:

authors<-c("Almeda","Acosta", "Moscone", "Guerra")

authorcountry <- read.table(text="
 authoralone countryalone
1      Acosta     Argentina
2    Aguilera     Argentina
3      Almeda         U.S.A
4       Alves        Brazil
5      Araújo        Brazil
6 Bernardello     Argentina
7      Daviña     Argentina
8      Guerra        Brazil
9       Honfi     Argentina
10    Moscone     Argentina",header=TRUE,fill=TRUE,stringsAsFactors=FALSE)

authorcountry$countryalone[(authorcountry$authoralone %in% authors)]
#order should be:
#  [1] "U.S.A"     "Argentina" "Argentina" "Brazil"   

#as in:
authors<-data.frame(authors)
get_merge<-merge(authors,authorcountry, by.x="authors", by.y="authoralone", sort = FALSE)
get_merge$countryalone

2 个答案:

答案 0 :(得分:3)

您可以使用match,即

authorcountry$countryalone[match(authors, authorcountry$authoralone)]
#[1] "U.S.A"     "Argentina" "Argentina" "Brazil" 

答案 1 :(得分:1)

或使用dplyr

library(dplyr)
authorcountry %>% 
        slice(match(authors, authoralone)) %>%
        .$countryalone
#[1] "U.S.A"     "Argentina" "Argentina" "Brazil"