【问题标题】:Deleting every n-th row in a dataframe删除数据框中的每第 n 行
【发布时间】:2011-10-30 00:10:58
【问题描述】:

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

【问题讨论】:

  • 这是一种方法。 df[seq(1, NROW(df), by = n),]
  • @Ramnath: df[-seq(n, NROW(df), by = n),] 可能会更好

标签: r sequence dataframe rows


【解决方案1】:

你可以创建如下函数

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)

【讨论】:

  • so df[-rowNumber, ] 删除该特定行
【解决方案2】:

我希望使用%% 运算符为这个问题添加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

【讨论】:

    【解决方案3】:

    如果您想从数据框或向量等中获取第 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&lt;-nrow(df) 子集行..

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-04
      • 1970-01-01
      • 1970-01-01
      • 2016-07-27
      • 2015-04-03
      • 2021-11-30
      • 1970-01-01
      • 2022-10-01
      相关资源
      最近更新 更多