Как выбрать переменные со звездочкой в ​​R - PullRequest
2 голосов
/ 09 апреля 2020

Я хочу выбрать некоторые переменные из моего CSV-файла в R. Я использовал это select(gender*, age*), но получил ошибку - объект не найден. Я пробовал select(`gender*`, `age*`) и select(starts_with(gender), starts_with(age)), но ни один не работает. Кто-нибудь знает, как выбрать переменные с символами звезды? Большое спасибо!

Ответы [ 2 ]

1 голос
/ 09 апреля 2020

Чтобы выбрать список имен столбцов, начинающихся с указанной строки c, можно использовать функцию starts_with() в dplyr. Для иллюстрации мы выберем два столбца, которые начинаются со строки Sepal, как в Sepal.Length и Sepal.Width.

library(dplyr)
select(iris,starts_with("Sepal")) %>% head()

... и вывод:

> select(iris,starts_with("Sepal")) %>% head()
  Sepal.Length Sepal.Width
1          5.1         3.5
2          4.9         3.0
3          4.7         3.2
4          4.6         3.1
5          5.0         3.6
6          5.4         3.9
>

Мы можем сделать то же самое в Base R с grepl() и регулярным выражением.

# base R version
head(iris[,grepl("^Sepal",names(iris))])

... и вывод:

> head(iris[,grepl("^Sepal",names(iris))])
  Sepal.Length Sepal.Width
1          5.1         3.5
2          4.9         3.0
3          4.7         3.2
4          4.6         3.1
5          5.0         3.6
6          5.4         3.9
>

Также обратите внимание, что если кто-то использует read.csv() для создания фрейма данных в R, он преобразует любые вхождения * в заголовках столбцов до ..

# confirm that * is converted to . in read.csv()
textFile <- 'v*1,v*2
1,2
3,4
5,6'
data <- read.csv(text = textFile,header = TRUE)
# see how illegal column name * is converted to . 
names(data)

... и вывод:

> names(data)
[1] "v.1" "v.2"
> 
1 голос
/ 09 апреля 2020

Возможно, что select из dplyr замаскировано select из любого другого пакета, так как это работает нормально. Либо укажите имя пакета с помощью ::, либо сделайте это в сеансе fre sh R с загруженным только dplyr

library(dplyr)
data(iris)
iris$'gender*' <- 'M'
iris%>% 
      head %>% 
      dplyr::select(`gender*`)
#   gender*
#1       M
#2       M
#3       M
#4       M
#5       M
#6       M
...