@ Joris Meys отличный ответ на этот знаменитый вопрос предлагает отбрасывать столбцы по имени, используя список имен. Требуется предварительное присвоение имени фрейму / матрице данных с использованием names(df)
или для матриц colnames(matrix)
.
Из любопытства я задался вопросом, возможна ли подобная стратегия, если сначала не присвоить имя фрейму / матрице данных. Я размышлял над этим фактом , отвечая на этот вопрос (откуда я взял свои образцы данных).
Мое предлагаемое решение оставляет столбец с select
следующим образом:
bind_cols(split(df$b, df$year)) %>% select(-'1997')
Сначала я пытался использовать do.call(cbind, split(df$b, df$year))
, но это дало матрицу, а dplyr::select
не понравилось. Теперь я могу, конечно, выбрать положительно :
do.call(cbind, split(df$b, df$year))[,c('1996','1998')]
Я также мог бы использовать subset
:
subset(do.call(cbind, split(df$b, df$year)), select = - `1997`)
Мой вопрос заключается в том, как использовать [
для «отрицательного выбора» по имени (здесь: отбрасывание 1997
), без предварительного присвоения матрицы / фрейма данных, то есть в одной строке.
Данные
set.seed(77)
df <- data.frame(year = rep(1996:1998,3), a = runif(9), b = runif(9), e = runif(9))
# required result something like: (result from code above)
1996 1998
[1,] 0.4569087 0.9881951
[2,] 0.1658851 0.4475605
[3,] 0.3647157 0.7033574