我有一个名为“mydata”的数据帧,它看起来像这样:

   A  B  C   D 
1. 5  4  4   4 
2. 5  4  4   4 
3. 5  4  4   4 
4. 5  4  4   4 
5. 5  4  4   4 
6. 5  4  4   4 
7. 5  4  4   4 

我想删除第2行,第4行,第6行。例如,像这样:

   A  B  C   D
1. 5  4  4  4 
3. 5  4  4  4 
5. 5  4  4  4 
7. 5  4  4  4 

当前回答

简化顺序:

mydata[-(1:3 * 2), ]

顺序如下:

mydata[seq(1, nrow(mydata), by = 2) , ]

由负序排列:

mydata[-seq(2, nrow(mydata), by = 2) , ]

或者如果你想通过选择奇数来子集:

mydata[which(1:nrow(mydata) %% 2 == 1) , ]

或者如果你想通过选择奇数来子集,版本2:

mydata[which(1:nrow(mydata) %% 2 != 0) , ]

或者如果你想通过过滤偶数来子集:

mydata[!which(1:nrow(mydata) %% 2 == 0) , ]

或者如果你想通过过滤偶数来子集,版本2:

mydata[!which(1:nrow(mydata) %% 2 != 1) , ]

其他回答

下面是一个按索引删除一行的快速而简单的函数。

removeRowByIndex <- function(x, row_index) {
  nr <- nrow(x)
  if (nr < row_index) {
    print('row_index exceeds number of rows')
  } else if (row_index == 1)
  {
    return(x[2:nr, ])
  } else if (row_index == nr) {
    return(x[1:(nr - 1), ])
  } else {
    return (x[c(1:(row_index - 1), (row_index + 1):nr), ])
  }
}

它的主要缺陷是row_index参数没有遵循作为值向量的R模式。可能还有其他问题,因为我只花了几分钟编写和测试它,而且在过去几周才开始使用R。任何评论和改进这将是非常欢迎的!

从员工中删除Dan。data -不需要管理新的data.frame。

employee.data <- subset(employee.data, name!="Dan")

使用Unique id的另一种方法是将数据子集化: *这来自一份我想删除化学标准的实际报告

Chem.Report<-subset(Chem.Report, Chem_ID!="Standard")

Chem_ID是列名。 !对于排除法很重要

简化顺序:

mydata[-(1:3 * 2), ]

顺序如下:

mydata[seq(1, nrow(mydata), by = 2) , ]

由负序排列:

mydata[-seq(2, nrow(mydata), by = 2) , ]

或者如果你想通过选择奇数来子集:

mydata[which(1:nrow(mydata) %% 2 == 1) , ]

或者如果你想通过选择奇数来子集,版本2:

mydata[which(1:nrow(mydata) %% 2 != 0) , ]

或者如果你想通过过滤偶数来子集:

mydata[!which(1:nrow(mydata) %% 2 == 0) , ]

或者如果你想通过过滤偶数来子集,版本2:

mydata[!which(1:nrow(mydata) %% 2 != 1) , ]

在数据帧中创建id列或使用任何列名来标识行。使用索引删除是不公平的。

使用子集函数创建新的框架。

updated_myData <- subset(myData, id!= 6)
print (updated_myData)

updated_myData <- subset(myData, id %in% c(1, 3, 5, 7))
print (updated_myData)