R выбрать столбцы по имени из вектора - PullRequest
0 голосов
/ 29 августа 2018

У меня есть набор данных, названия столбцов которого представляют собой коды станций, состоящие из цифр и букв. Я хочу выбрать группы столбцов / кодов в зависимости от определенного условия.

У меня есть список из 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

Я могу прочитать каждую группу в цикле

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 голосов
/ 29 августа 2018

На основании комментария от @ RLave

Проблема возникла из-за рассмотрения кодов как фактора. Поскольку они являются числами или комбинациями цифр и букв, они были прочитаны как факторы. При смене символа все работало нормально и были выбраны правильные столбцы.

Только что внес изменения в мой код:

my.codes<-as.character(codes.by.zone[[j]])
0 голосов
/ 29 августа 2018

Я бы предложил просто поднастроить ваш фрейм данных, используя одинарные скобки:

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)])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...