【发布时间】:2011-10-30 00:10:58
【问题描述】:
如何从 R 中的数据框中删除每第 n 行?
【问题讨论】:
-
这是一种方法。
df[seq(1, NROW(df), by = n),] -
@Ramnath:
df[-seq(n, NROW(df), by = n),]可能会更好
如何从 R 中的数据框中删除每第 n 行?
【问题讨论】:
df[seq(1, NROW(df), by = n),]
df[-seq(n, NROW(df), by = n),] 可能会更好
你可以创建如下函数
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)
【讨论】:
我希望使用%% 运算符为这个问题添加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 行。见here
【讨论】:
如果您想从数据框或向量等中获取第 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) 子集行..
【讨论】: