r语言 - 在使用dplyr排列行时引用循环中的变量



我正在尝试根据第二个数据集中的年份列安排数据集中的行。由于需要排序的列名将从矢量索引,我如何将它们作为参数输入到arrange函数中?

请注意,我不能简单地在第一个数据集中排序年份,因为完整的示例中有各种需要排序的列。

data <- data.frame(
id=c(1,1,2,2,3,3,4,4,5,5),
year=rep(c(2010, 2011), 5),
employ=c("yes", "yes", "no", "yes", "yes", "no", NA, "yes", "no", NA))
data2 <- data.frame(
id=c(1,1,2,2,3,3,4,4,5,5),
year=c(2010,2010, 2010, 2010, 2010, 2011, 2011, 2011, 2011, 2011),
employ=c("yes", "yes", "no", "yes", "yes", "no", NA, "yes", "no", NA))
columns <- "employ"

尝试:

for(i in seq_along(columns)) {data %>% arrange(as.name(columns[i]), data2[2])}
所需输出:

id year employ 
1   1 2010    yes     
2   2 2010     no      
3   3 2010    yes     
4   4 2010   <NA>    
5   5 2010     no      
6   1 2011    yes     
7   2 2011    yes     
8   3 2011     no     
9   4 2011    yes     
10  5 2011   <NA>    

您可以使用arrangematch:

library(dplyr)
data %>% arrange(match(year, unique(data2$year)))
#   id year employ
#1   1 2010    yes
#2   2 2010     no
#3   3 2010    yes
#4   4 2010   <NA>
#5   5 2010     no
#6   1 2011    yes
#7   2 2011    yes
#8   3 2011     no
#9   4 2011    yes
#10  5 2011   <NA>

In base R:

data[order(match(data$year, unique(data2$year))), ]

我们可以将base Rfactor结合使用

data[order(factor(data$year, levels = unique(data2$year))),]

arrange

library(dplyr)
data %>% 
arrange(factor(year, levels = unique(data2$year)))
#   id year employ
#1   1 2010    yes
#2   2 2010     no
#3   3 2010    yes
#4   4 2010   <NA>
#5   5 2010     no
#6   1 2011    yes
#7   2 2011    yes
#8   3 2011     no
#9   4 2011    yes
#10  5 2011   <NA>

最新更新