Удаление каждой n-й строки в кадре данных - PullRequest
17 голосов
/ 30 октября 2011

Как я могу удалить каждую n-ю строку из кадра данных в R?

Ответы [ 3 ]

36 голосов
/ 30 октября 2011

Вы можете создать функцию следующим образом

Nth.delete<-function(dataframe, n)dataframe[-(seq(n,to=nrow(dataframe),by=n)),]

Давайте проверим это

DF<-data.frame(A=1:15, B=rnorm(15), C=sample(LETTERS,15))
Nth.delete(DF, 3)
11 голосов
/ 12 апреля 2013

Если вы хотите получить каждый n-й столбец из фрейма данных или вектора и т. Д., Используйте подмножество по модулю ...

Выберите n-й столбец, повторяя наборы здесь по модулю 3 (выберите nth по вашему желанию)

> x <- c(1,2,3,4,5,6)
> d <- rbind(x,x,x)
> df <- as.data.frame(d, row.names=T)
> c <- 1:ncol(df)
> c
[1] 1 2 3 4 5 6
c%%3   ### nth cycle, here every 3
[1] 1 2 0 1 2 0

#select the every 3rd column of every 3
> df[, c%%3==0]  
  V3 V6
1  3  6
2  3  6
3  3  6

#every first column of every 3
> df[, c%%3==1]
  V1 V4
1  1  4
2  1  4
3  1  4

#every 2nd column of every 3
> df[, c%%3==2]
  V2 V5
1  2  5
2  2  5
3  2  5


#drop the 3rd columns  
> df[, !(c%%3==0)]
  V1 V2 V4 V5
1  1  2  4  5
2  1  2  4  5
3  1  2  4  5

etc ... swap c <-nrow (df) для подстановки строк .. </p>

6 голосов
/ 04 мая 2018

Я хочу добавить к этой проблеме подход в стиле tidyverse, используя оператор %%.

library(dplyr)
df <- data.frame(V1 = seq(26), V2 = letters)
df %>% dplyr::filter(row_number() %% 2 != 0) ## Delete even-rows
df %>% dplyr::filter(row_number() %% 2 != 1) ## Delete odd-rows
df %>% dplyr::filter(row_number() %% 3 != 1) ## Delete every 3rd row starting from 1

Вы можете использовать ту же идею для выбора каждой n-й строки, конечно. Смотри здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...