R从矢量中按名称选择列

问题描述 投票:-7回答:2

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

我有一个包含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"

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

在此先感谢您的帮助

r dplyr
2个回答
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)])

0
投票

根据@RLave的评论

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

刚刚对我的代码进行了更改:

my.codes<-as.character(codes.by.zone[[j]])
© www.soinside.com 2019 - 2024. All rights reserved.