R: Удалить строки в списке data.frames - PullRequest
0 голосов
/ 27 июня 2018

Может быть, слишком много вопросов сразу, но я не уверен, с чего начать менять свое мышление. Задача: Я хочу создавать и манипулировать различными TXT-файлами, управляющими моделью Delphi. Я хочу использовать 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 голосов
/ 27 июня 2018

Чтобы удалить первую строку в каждом кадре данных, попробуйте это:

lapply(ls, function(x) {x <- x[-1, ]})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...