Как выделить некоторые столбцы в алфавитном порядке из данных? - PullRequest
2 голосов
/ 05 марта 2012

У меня есть фрейм данных, в котором столбцы расположены в алфавитном порядке (COL_A, COL_B, COL_C и т. Д.). Как я могу выделять столбцы от H до M, не записывая имена столбцов явно или не считая количество столбцов?

Изменить для пояснения: я не хочу сказать, что столбцы точно COL_A, COL_B и т. Д., Просто они расположены в алфавитном порядке с любой общей структурой в именных строках. Это могут быть, например, Алабама, Арканзас, Техас, Вайоминг и Замбия. В двух словах, я пытаюсь найти альтернативу df_subset = df[,n1:n2], где я могу напрямую указать имена столбцов вместо того, чтобы подсчитывать номера столбцов n1 и n2.

Ответы [ 3 ]

3 голосов
/ 05 марта 2012

Более общий подход заключается в использовании операторов >= и <=, применяемых к именам столбцов.Вот пример использования фрейма данных, в котором имена столбцов являются штатами США:

> df <- data.frame(as.list(state.abb))
> colnames(df) <- state.name
> df[, 1:3]
  Alabama Alaska Arizona
1      AL     AK      AZ
> df[colnames(df) >= "Florida" & colnames(df) <= "Illinois"]
  Florida Georgia Hawaii Idaho Illinois
1      FL      GA     HI    ID       IL

Другой метод - найти индексы двух границ с помощью match и построить последовательность между этими двумя:

> df[seq(from = match("Florida", colnames(df)),
+        to   = match("Illinois", colnames(df)))]
  Florida Georgia Hawaii Idaho Illinois
1      FL      GA     HI    ID       IL
3 голосов
/ 05 марта 2012
d = as.data.frame(matrix(1:26,nrow=1))
names(d) = paste("COL_", LETTERS, sep="")
grep("[H-M]$", names(d))
d[, grepl("[H-M]$", names(d))]
1 голос
/ 05 марта 2012

Вы можете попробовать что-то вроде этого

dfrm <- data.frame(replicate(26, rnorm(10)))
colnames(dfrm) <- paste("COL", LETTERS, sep="_")
which(substr(colnames(dfrm), 5, 6) %in% LETTERS[3:6])

Последнее выражение возвращает номер столбца, который соответствует буквам от C до F. См. Также match, и этот связанный поток: Получить индекс столбца изметка во фрейме данных .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...