我在一个文件夹中有几个文件,我将其作为列表读入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文件会更容易。
答案 0 :(得分:2)
如果您坚持使用data.frames列表fs
,而不是assign
,那么您可以执行类似
lapply(fs, function(x) x[-(sample(nrow(x)-6000,1)+0:5999), ])
如果n=nrow(x)
永远在6000
之下,那么您当然会遇到麻烦。