我正在尝试根据第二个数据集中的年份列安排数据集中的行。由于需要排序的列名将从矢量索引,我如何将它们作为参数输入到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>
您可以使用arrange
与match
:
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 R
与factor
结合使用
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>