R从向量中按名称选择列

时间:2018-08-29 12:32:57

标签: r dplyr

我有一个数据集,其中列名是由数字和字母组成的桩号。我想根据特定条件选择一组列/代码。

我有28个组的列表,每个组包含一组代码(每组的代码数量不同)

head(estaciones.zonas)
[[1]]
[1] 8490  9562  9563  8489A
114 Levels: 000A 7034 7041 7244 7247 7261 8003A 8007 8010A 8011A 8013 8015A 8015O 8018 8021A ... 9563

[[2]]
[1] 8492
114 Levels: 000A 7034 7041 7244 7247 7261 8003A 8007 8010A 8011A 8013 8015A 8015O 8018 8021A ... 9563

[[3]]
[1] 8507  8514  8511A 8455  8483E 8494O 8496E 8502I
114 Levels: 000A 7034 7041 7244 7247 7261 8003A 8007 8010A 8011A 8013 8015A 8015O 8018 8021A ... 9563

[[4]]
[1] 8518  8508U
114 Levels: 000A 7034 7041 7244 7247 7261 8003A 8007 8010A 8011A 8013 8015A 8015O 8018 8021A ... 9563

[[5]]
[1] 8501  8456A 8500A 8503G 8446G 8448A 8450C
114 Levels: 000A 7034 7041 7244 7247 7261 8003A 8007 8010A 8011A 8013 8015A 8015O 8018 8021A ... 9563

我可以在for循环中读取每个组

my.codes<-codes.by.zone[[j]]

如果j = 5,那么

> my.codes
[1] 8501  8456A 8500A 8503G 8446G 8448A 8450C

没关系

但是当我尝试通过名称选择列时,某些方法无法正常工作

my.data<-select(temp.data,Date,c(my.codes))

然后没有正确选择列

> names(my.data)
[1] "Date" "8453B" "8414A" "8450C" "8456A" "8394A" "8395C" "8402"

这与应有的完全不同。我究竟做错了什么?我应该对列名进行硬编码而不是构建向量吗? (不是一种优雅而有用的方法)

预先感谢您的帮助

2 个答案:

答案 0 :(得分:1)

我建议您使用单个方括号简单地设置您的数据框:

my.codes<-c("Date","8501","8456A","8500A","8503G","8446G","8448A","8450C")
my.data<-temp.data[my.codes]

要应用多个代码:

estaciones.zonas <- list(c("8490", "9562", "9563", "8489A"), "8492", 
c("8507","8514","8511A","8455","8483E","8494O","8496E","8502I"), c("8518","8508U"), c("8501", "8456A", "8500A", "8503G", "8446G", "8448A", "8450C"))

lapply(estaciones.zonas, function(x) temp.data[c("Date",x)])

答案 1 :(得分:0)

基于@RLave的评论

问题来自于将代码视为因素。由于它们是数字或数字和字母的组合,因此被视为要素。通过更改为字符,一切正常,并选择了正确的列。

只需更改我的代码即可

my.codes<-as.character(codes.by.zone[[j]])