Rbinding элементы списка, но между каждым элементом добавить данные заполнителя - PullRequest
1 голос
/ 11 июня 2019

Я пытаюсь подготовить исходные данные для системной экологической модели.В настоящее время у меня есть фрейм данных с именем «Precip», который имеет 64 столбца, каждый столбец «X1», «X2», «X3» и т. Д. Представляет собой модель данных о суточных осадках за 30 лет (см. Ниже).Мне нужно привязать каждую модель друг к другу, чтобы у меня была одна строка со всеми данными в стеке.Однако между каждой моделью мне нужно добавить данные об осадках наполнителя, которые составляют всего 365 дней с 0 осадками (см. Ниже).По сути, мне нужно создать один фрейм данных или список, который является rbind (X1, FillerPrecip, X2, FillerPrecip, X3, FillerPrecip и т. Д.).

Я попытался превратить как Precip, так и FillerPrecip в списки и использовать rbindlist, однако это не позволило бы мне связать FillerPrecip между каждым элементом Precip.

> str(Precip)
'data.frame':   11322 obs. of  64 variables:
 $ X1   : num  0.11 0 0 0 0 ...
 $ X2   : num  0 0 0 0 0 ...
 $ X3   : num  0.3437 0.1464 0 0 0.0422 ...
 $ X4   : num  0 0 0 0 0 0 0 0 0 0 ...
 $ X5   : num  0 0 0 0 0 ...
 $ X6   : num  0 0 0.0304 0 0 ...

> head(FillerPrecip)
  V1
1  0
2  0
3  0
4  0
5  0
6  0

Ответы [ 2 ]

1 голос
/ 11 июня 2019

Рассмотрите возможность изменения данных с широких на длинные. Затем по X группе rbind каждого подмножества модели:

# RESHAPE LONG
rdf <- reshape(df, varying = list(names(df)), times = names(df),
               timevar = "X", v.names = "FillerPrecip",
               new.row.names = 1:1E4, direction = "long")

# BY GROUP: rbind 365 ROWS OF ZERO INTO FillerPrecip COLUMN           
df_list <- by(rdf, rdf$X, function(sub)    
    rbind(sub, data.frame(X=NA, FillerPrecip = rep(0, 365), id = NA))    
)

# CONCATENATE INDIVIDUAL DFs INTO MASTER DF
final_df <- do.call(rbind, unname(df_list))

Rextester demo

0 голосов
/ 11 июня 2019

Попробуйте следующее:

PrecipVector <- c(sapply(seq_along(Precip), function(i) {
  c(Precip[,i], FillerPrecip)
}))

Это вставит FillerPrecip после каждого столбца Precip.Результатом будет числовой вектор, и при необходимости вы можете преобразовать его в кадр данных или список.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...