Есть ли способ выбрать каждый столбец из одного столбца в другой с помощью скобок в R? - PullRequest
0 голосов
/ 13 апреля 2019

Я знаю, что в subset() вы можете легко вытянуть каждый столбец, начиная с одного и заканчивая другим.

df <- as.data.frame(state.x77)
subset(df, Frost > 30, select=Illiteracy:Murder)

Я знаю, что с помощью скобок вы можете сделать что-то вроде df[df$Frost > 30, 3:5]

Есть ли способ воссоздать оператор подмножества с помощью скобок, который использует имена столбцов?

Ответы [ 2 ]

2 голосов
/ 13 апреля 2019

Вы найдете

df <- state.x77
df[df[, "Frost"] > 150, c("Illiteracy", "Life Exp", "Murder")]

производит

              Illiteracy Life Exp Murder
Alaska               1.5    69.31   11.3
Colorado             0.7    72.06    6.8
Maine                0.7    70.39    2.7
Minnesota            0.6    72.96    2.3
Montana              0.6    70.56    5.0
Nevada               0.5    69.03   11.5
New Hampshire        0.7    71.23    3.3
North Dakota         0.8    72.78    1.4
South Dakota         0.5    72.08    1.7
Vermont              0.6    71.64    5.5
Wyoming              0.6    70.29    6.9

Кстати, state.x77 является матрицей, а не кадром данных.В качестве матрицы вы могли бы использовать

df <- state.x77
df[df[, "Frost"] > 150, which(colnames(df)=="Illiteracy"):which(colnames(df)=="Murder")]

или как фрейм данных

df <- as.data.frame(state.x77)
df[df[, "Frost"] > 150, which(names(df) == "Illiteracy"):which(names(df) == "Murder")]

, чтобы получить тот же результат, и вы могли бы написать функцию, чтобы сделать это красивее

0 голосов
/ 13 апреля 2019

Другой подход с dplyr

library(dplyr)
df = as.data.frame(state.x77)
df %>% filter(Frost > 30) %>% select(Illiteracy:Murder) %>% head()

  Illiteracy Life Exp Murder
1        1.5    69.31   11.3
2        1.9    70.66   10.1
3        0.7    72.06    6.8
4        1.1    72.48    3.1
5        0.9    70.06    6.2
6        2.0    68.54   13.9
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...