我有一个由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。
答案 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