Удаление каждого n-го столбца из кадра данных в r - PullRequest
1 голос
/ 20 апреля 2020

Я пытаюсь уменьшить размер фрейма данных, удаляя каждый третий столбец.

Вот мой пример фрейма данных:

example = data.frame(x=c(1,2,3,4), y=c(1,2,3,4), z=c(1,2,3,4), w=c(1,2,3,4), p=c(1,2,3,4), q=c(1,2,3,4), r=c(1,2,3,4))

, который выглядит следующим образом

x y z w p q r
1 1 1 1 1 1 1
2 2 2 2 2 2 2
3 3 3 3 3 3 3
4 4 4 4 4 4 4

Я хотел бы преобразовать его во что-то похожее на это

x y w p r
1 1 1 1 1 
2 2 2 2 2 
3 3 3 3 3 
4 4 4 4 4 

Я смог уменьшить количество строк с помощью tidyverse:

example <- example %>% dplyr::filter(row_number() %% 3 != 1) 

Но я могу ' Не могу понять, как удалить каждый третий столбец.

Я также пытался использовать эту строку:

example[, !(c%%3==0)]

из Удаление каждой n-й строки в фрейме данных но я продолжаю получать эту ошибку: Ошибка в c %% 3: не числовой c аргумент бинарного оператора

Заранее спасибо за вашу помощь.

Ответы [ 2 ]

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

Вы можете сделать это очень простым способом в базе.

example[, c(TRUE, TRUE, FALSE)]

Логический вектор будет повторяться по мере необходимости для столбцов. Если вы хотите, чтобы он масштабировался, вы можете сделать что-то вроде этого.

n <- 3
example[, c(rep(TRUE, n - 1), FALSE)]

Если вы предпочитаете, эквивалент dplyr этого может быть:

example %>%
  select(everything()[c(TRUE, TRUE, FALSE)])
0 голосов
/ 20 апреля 2020

Вот оно:

library(dplyr)

col_index <- seq(1:ncol(example)) 
example %>% select(col_index[col_index %% 3 != 0]) 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...