在数据框中逐行删除

时间:2014-08-15 10:53:03

标签: r dataframe

我想创建一个非常简单的函数,它将数据帧和行号作为arguemnts,然后返回没有该行的数据帧。如果我有:

1 ben
2 adrian
3 bill
4 matthew

在调用remove(3,df)后,我会得到:

1 ben
2 adrian
3 matthew

任何人都可以提供帮助吗?

3 个答案:

答案 0 :(得分:4)

此功能可以写成一行(尽管没有错误检查):

remrow <- function(x, rows) x[-rows,, drop = FALSE]

这是您的数据:

dat <- data.frame(A = 1:4, B = 5:8)
rownames(dat) <- c("ben", "adrian", "bill", "matthew")

remrow(dat, 2)将删除“adrian”行,而remrow(dat, 1:2)将删除“ben”和“adrian”行。

请注意,is.data.frame(remrow(dat, 1))的评估结果为TRUE

答案 1 :(得分:2)

看起来这就是你真正需要的一切

> removeRows <- function(rowNum, data) {
      newData <- data[-rowNum, , drop = FALSE]
      rownames(newData) <- NULL
      newData
  }
> dat
#        V2
# 1     ben
# 2  adrian
# 3    bill
# 4 matthew
> removeRows(3, dat)
#        V2
# 1     ben
# 2  adrian
# 3 matthew

答案 2 :(得分:1)

如果df是数据集

fun1 <- function(data, rowN){
 indx <- !(seq_len(nrow(data)) %in% rowN)
 data1 <- data[indx,, drop=F]
 row.names(data1) <- seq_len(nrow(data1))
 data1
 }

fun1(df, 3)
#       V1
#1     ben
#2  adrian
#3 matthew

fun1(df,1:2)
#       V1
#1    bill
#2 matthew