以与包含列名称的数组中的名称相同的顺序选择列

时间:2015-02-17 09:10:43

标签: r

我有一个由5列组成的数据框。我还有一个包含其中一些列名的数组。我想要一个新的数据框,只包含其名称存在于此数组中的列,但其顺序与它们在数组中出现的顺序相同。我能够获得列,但不是以相同的顺序。请参阅下面的代码

col1 = c(1,1,1,1,1)
col2 = c(2,2,2,2,2)
col3 = c(3,3,3,3,3)
col4 = c(4,4,4,4,4)
col5 = c(5,5,5,5,5)
df = data.frame(col1,col2,col3,col4,col5)
df
  col1 col2 col3 col4 col5
1    1    2    3    4    5
2    1    2    3    4    5
3    1    2    3    4    5
4    1    2    3    4    5
5    1    2    3    4    5

columnsarray = c("col4","col1","col2")
df[which(names(df) %in% columnsarray)]
  col1 col2 col4
1    1    2    4
2    1    2    4
3    1    2    4
4    1    2    4
5    1    2    4

如您所见,我已将列名称称为col4,col1,col2。但是,输出看起来像col1 col2 col4。

2 个答案:

答案 0 :(得分:1)

如果你想按照你的顺序想要它,试试这个:

df[columnsarray[columnsarray %in% names(df)]]
# col4 col1 col2
# 1    4    1    2
# 2    4    1    2
# 3    4    1    2
# 4    4    1    2
# 5    4    1    2

答案 1 :(得分:0)

只需df[columnsarray]即可。

您也可以使用df[,columnsarray],但在length(columnsarray) == 1的情况下,您将获得一个向量(而不是data.frame)。

> str( df[c("col4")] )
'data.frame':   5 obs. of  1 variable:
 $ col4: num  4 4 4 4 4

> str( df[,c("col4")] )
 num [1:5] 4 4 4 4 4