Как мне получить номер столбца из фрейма данных, который содержит определенные c строки? - PullRequest
3 голосов
/ 07 августа 2020

У меня есть фрейм данных df с 7 столбцами, и у меня есть список z, содержащий несколько строк. Мне нужен фрейм данных, содержащий только столбцы в df, которые содержат строку из z.

df <- data.frame("a_means","b_means","c_means","d_means","e_mean","f_means","g_means")
z <- c("a_m","c_m","f_m")

Как мне получить номер столбца строк z в df? Или как мне получить фрейм данных только со столбцами, которые содержат строки z.

Я хочу:

print(df)
"a_means" "c_m" "f_m"

То, что я пробовал:

match(a, names(df)

и

df[,which(colnames(df) %in% colnames(df[ ,grepl(z,names(df)])]

Ответы [ 5 ]

3 голосов
/ 07 августа 2020

Вы можете использовать:

df[,match(z, substring(colnames(df), 1, 3))]
3 голосов
/ 07 августа 2020

С основанием R:

z <- paste(z, collapse = "|")
df[, grepl(z, names(df))]      # you could use grep as well
2 голосов
/ 07 августа 2020

Объедините шаблоны поиска и используйте их в качестве шаблона для функции stringr::str_detect().

library(dplyr)
library(stringr)

df <- data.frame(a_means = "a_means",
                 b_means = "b_means",
                 c_means = "c_means",
                 d_means = "d_means",
                 e_means = "e_means",
                 f_means = "f_means",
                 g_means = "g_means"
                 )

z <- c("a_m","c_m","f_m")

z <- paste(z, collapse = "|")

df %>% select_if(str_detect(names(df), z))
#>   a_means c_means f_means
#> 1 a_means c_means f_means

1 голос
/ 07 августа 2020

Вы можете просто сделать это:

library(dplyr)

df %>% 
  select(contains(z))

Проверить help("starts_with"). Вы также можете сопоставить начальному префиксу, среди прочего, starts_with().

0 голосов
/ 07 августа 2020

Вы можете использовать select и matches для подгруппы столбцов на основе z

library(dplyr)

df <- data.frame("a_means","b_means","c_means","d_means","e_mean","f_means","g_means")
z <- c("a_m","c_m","f_m")

df %>% 
  select(matches(z))
#>   X.a_means. X.c_means. X.f_means.
#> 1    a_means    c_means    f_means
...