我想创建一个非常简单的函数,它将数据帧和行号作为arguemnts,然后返回没有该行的数据帧。如果我有:
1 ben
2 adrian
3 bill
4 matthew
在调用remove(3,df)后,我会得到:
1 ben
2 adrian
3 matthew
任何人都可以提供帮助吗?
答案 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