在R中的数据框中排序列

时间:2016-12-29 21:35:20

标签: r dataframe

我使用以下代码创建了一个数据框:

manager <- c(1,2,3,4,5)
date <- c("10/24/08","10/28/08","10/1/08","10/12/08","5/1/09")
country <- c("US","US","UK","UK","UK")
gender <- c("M","F","F","M","F")
age <- c(32,45,25,39,99)
q1 <- c(5,3,3,3,2)
q2 <- c(4,5,5,3,2)
q3 <- c(5,2,5,3,2)
q4 <- c(5,5,5,NA,2)
q5 <- c(5,5,2,NA,1)
leadership <- data.frame(manager,date,country,gender,age,
                     q1,q2,q3,q4,q5, stringsAsFactors = FALSE)

然后我使用以下内容查询:View(leadership[c(1:3),c("q1","q2","q3","q4","q5")])

我的问题如下:有没有办法为列设置有序结构,这样我就可以使用以下代码进行查询? View(leadership[c(1:3),c("q1":"q5")])

提前致谢。

2 个答案:

答案 0 :(得分:1)

或者,在基数R中,在列名称上附加grep()的列表:

leadership[append(1:3, grep("^q.*$", names(leadership)))]
#   manager     date country q1 q2 q3 q4 q5
# 1       1 10/24/08      US  5  4  5  5  5
# 2       2 10/28/08      US  3  5  2  5  5
# 3       3  10/1/08      UK  3  5  5  5  2
# 4       4 10/12/08      UK  3  3  3 NA NA
# 5       5   5/1/09      UK  2  2  2  2  1

如果只是q的一部分在正则表达式搜索中传递:

leadership[append(1:3, grep("^q[1-3].*$", names(leadership)))]
#   manager     date country q1 q2 q3
# 1       1 10/24/08      US  5  4  5
# 2       2 10/28/08      US  3  5  2
# 3       3  10/1/08      UK  3  5  5
# 4       4 10/12/08      UK  3  3  3
# 5       5   5/1/09      UK  2  2  2

leadership[append(1:3, grep("^q[4-5].*$", names(leadership)))]
#   manager     date country q4 q5
# 1       1 10/24/08      US  5  5
# 2       2 10/28/08      US  5  5
# 3       3  10/1/08      UK  5  2
# 4       4 10/12/08      UK NA NA
# 5       5   5/1/09      UK  2  1

答案 1 :(得分:0)

dplyr::select允许您提出的非标准语法。

library(dplyr)
View(select(leadership[1:3, ], q1:q5))

有关详细信息,请参阅?select。您也可以select(leadership, starts_with("q"))