在数据框中删除每个第n行

22

如何在R中从数据框中删除每第n行?


8
这是一种做法:df[seq(1, NROW(df), by = n),] (此代码为R语言,意为从数据框df中每隔n行选取一行。) - Ramnath
10
@Ramnath:df[-seq(n,NROW(df),by=n),]可能效果更好。 - Henry
3个回答

39
你可以创建一个如下的函数。
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)

2
所以 df[-rowNumber, ] 删除了该行。 - MySchizoBuddy

15

我希望将 tidyverse 风格的方法应用到这个问题中,使用 %% 运算符。

library(dplyr)
df <- data.frame(V1 = seq(26), V2 = letters)

df %>% filter(row_number() %% 2 != 0) ## Delete even-rows
df %>% filter(row_number() %% 2 != 1) ## Delete odd-rows
df %>% filter(row_number() %% 3 != 1) ## Delete every 3rd row starting from 1

当然,您可以使用相同的思路来选择每n行,参见此处


12
如果您想从数据框或向量中获取第n列的每个元素等,请使用模数子集...
通过重复集合来选择第n列,例如取模3(根据需要选择第n列)。
> 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

等等… 替换 c<-nrow(df) 以选择行。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接