R: Я пытаюсь применить Rollmean (зоопарк) к определенному столбцу в нескольких фреймах данных, которые находятся в списке - PullRequest
0 голосов
/ 23 января 2020

reprod:

df1 <- data.frame(X = c(0:9), Y = c(10:19))  
df2 <- data.frame(X = c(0:9), Y = c(10:19))  
df3 <- data.frame(X = c(0:9), Y = c(10:19))

list_of_df <- list(A = df1, B = df2, C = df3)  
list_of_df

Я пытаюсь применить функцию rollmean из zoo к каждому столбцу 'Y' в этом списке фреймов данных. Я попытался выполнить безуспешно, кажется, что независимо от того, каким образом я его раскручиваю, нет способа обойти, указав тот фрейм данных, к которому вы хотите применить в какой-то момент.

Это делает один из фреймов данных

roll_mean <- rollmean(list_of_df$A, 2)
roll_mean

очевидно, что это не работает:

roll_mean1 <- rollmean(list_of_df, 2)
roll_mean1

Я также пробовал это: подмножество (может не быть необходимым)

Sub1 <- lapply(list_of_df, "[", 2)
roll_mean1 <- rollmean(Sub1, 2)
roll_mean1

там нет кажется, способ сделать это без указания конкретного кадра данных в функции rollmean

lapply(list_of_df), function(x) rollmean(list_of_df, 2))

для l oop? также безуспешно

For (i in list_of_df) {roll_mean1 <- rollmean(Sub1, 2)
    Exp 
}

Излагаю очевидное, но я очень новичок в кодировании в целом и буду признателен за некоторые советы. Мне пришло в голову, что, даже если бы это работало, усредненный столбец был бы на одно значение длиннее, чем остальная часть кадра данных; как бы мне обойти это?

1 Ответ

0 голосов
/ 24 января 2020

Вопрос в одном месте говорит, что он хочет выполнить rollmean только для Y, а в другом месте говорит, что это работает roll_mean <- rollmean(list_of_df$A, 2), но это делает все столбцы.

1) Предполагая, что вы хотите применить rollmean ко всем столбцам:

Используйте lapply, например:

lapply(list_of_df, rollmean, 2)

This также работает:

for(i in seq_along(list_of_df)) list_of_df[[i]] <- rollmean(list_of_df[[i]], 2)

2) Если вы хотите применить его только к столбцу Y:

lapply(list_of_df, transform, Y = rollmean(Y, 2, fill = NA))

или

for(i in seq_along(list_of_df)) {
  list_of_df[[i]]$Y <- rollmean(list_of_df[[i]]$Y, 2, fill = NA)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...