首页 文章

使用R从列表中的数据帧中删除行

提问于
浏览
1

我在一个文件夹中有几个文件,我作为列表读入R . 列表中的每个元素都是一个数据帧,我需要从每个数据帧中删除一个随机连续的6000行 . 我可以取消列出数据框并拉出行,但理想情况下我想将它保留在列表中,只需遍历列表中的每个元素并删除我需要的行 . 我认为for循环或apply函数可以工作,但是当它们在列表中时,单个元素似乎不被识别为数据帧 .

这是我到目前为止所拥有的

files  <- list.files('file location')
fs <- lapply(files, read.table, sep=',',skip=3,header=TRUE)

##separates the list into individual data frames
for (i in seq(fs))
  assign(paste("df", i, sep = ""), fs[[i]])

##selects a random 6000 rows to remove from a dataframe
n <- nrow(df1)
samp <- sample(1:(n-6000),1)
rmvd <- df1[-seq(from = samp, to =samp+5999),]

我要么将最后一部分单独应用于每个数据框,并将它们放回列表中,或者能够将它们应用到列表中 . 我最终希望它在列表中,因为将每个数据帧写入自己的csv文件会更容易 .

1 回答

  • 2

    如果您坚持使用data.frames列表 fs ,而不是 assign ,那么您可以执行类似的操作

    lapply(fs, function(x) x[-(sample(nrow(x)-6000,1)+0:5999), ])
    

    如果 n=nrow(x) 永远在 6000 之下,当然你会遇到麻烦 .

相关问题