R:删除data.frames列表中的行

时间:2018-06-27 08:19:42

标签: r list dataframe

一次可能有太多问题,但是我不确定从哪里开始改变我的思维方式。 任务:我想创建和处理各种控制delphi模型的txt文件。我想为此使用R。

文件最初是什么样的:

[submodelname1]
variable1=value1
variable2=value2

[submodelname2]
variable3=value3
variable4=value4

最后,我想根据最多由4个因素定义的特定变体来更改变量。因此,每个变体的文件看起来都与开头相同,但每个变体的值不同。文件名应为:每个变量的Factor1_factor2_factor3_factor4.txt。 在尝试for循环方法时,我已经解决了最后一步。但是当它与许多链接的循环变得太复杂时,我切换到使用列表。

到目前为止我在列表方法上的工作:

# read a sample file to get the desired pattern
file <- read.table(file="file.txt", sep="=", dec=".", header=FALSE, 
                       fill=TRUE, blank.lines.skip = TRUE)

# extracted submodel names in "[]"
sublistnames <- as.factor(droplevels(file[grep("[\b[A-Z0-9]]", file$V1),1])) 

# list of data.frame per submodel
ls <- split(file, cumsum(1:nrow(file) %in% grep("[\b[A-Z0-9]]", file$V1))) 

# names the lists like the submodels
names(ls) <- sublistnames 

现在,列表的每个data.frame的第一行中仍然存在子模型名称,在研究了处理列表的SO线程数小时后,我仍然无法删除它们。我学到了

# this line addresses the rows I want to get rid of, but "<- NULL" doesn't work
lapply(ls, "[", 1, c(1,2))

我如何解决此问题的任何建议?或有任何想法如何以其他方式面对任务?我渴望了解我的想法错误的地方。 预先感谢。

与此同时,我尝试了:

for (i in 1:length(ls)) { 
  ls[[i]][1,] <- NA
}
ls <- lapply(ls, function(x) x[!is.na(x)])

但是我对输出不满意,我认为还有一种更优雅的方法。

1 个答案:

答案 0 :(得分:0)

要删除每个数据框中的第一行,请尝试以下操作:

lapply(ls, function(x) {x <- x[-1, ]})