Как отстать и рассчитать разницу для каждого кадра данных в списке? - PullRequest
0 голосов
/ 21 июня 2019

У меня есть список, содержащий 981 фрейм данных. Каждый data.frame имеет одинаковую структуру.

Я хочу отложить один столбец (называемый ростом), чтобы рассчитать рост во времени (от одного наблюдения к другому) для каждого фрейма данных.

Я пытался, как-то не смог сделать это.

my_list <- 
  list(
    data.frame(time = 1:10, growth = rnorm(10, mean = 1.3, sd = 2)),
    data.frame(time = 1:10, growth = rnorm(10, mean = 1.3, sd = 2)),
    data.frame(time = 1:10, growth = rnorm(10, mean = 1.3, sd = 2))
  )

Ответы [ 2 ]

2 голосов
/ 21 июня 2019

Если вы не можете обмениваться реальными данными, вы можете создать поддельный набор данных, чтобы сделать запись воспроизводимой.

Если я вас правильно понял, вот что вы можете сделать с lapply

lapply(list_df, function(x) {x$difference <- c(NA, diff(x$growth)); x})

#[[1]]
#   growth b difference
#1       3 a         NA
#2       8 b          5
#3       4 c         -4
#4       7 d          3
#5       6 e         -1
#6       1 f         -5
#7      10 g          9
#8       9 h         -1
#9       2 i         -7
#10      5 j          3

#[[2]]
#   growth b difference
#1      10 a         NA
#2       5 b         -5
#3       6 c          1
#4       9 d          3
#5       1 e         -8
#6       7 f          6
#7       8 g          1
#8       4 h         -4
#9       3 i         -1
#10      2 j         -1

Способ сделать то же самое tidyverse будет

library(dplyr)
library(purrr)

map(list_df,. %>% mutate(difference = c(NA, diff(growth))))

ИЛИ

map(list_df,. %>% mutate(difference = growth - lag(growth)))

данные

set.seed(123)
list_df <- list(data.frame(growth = sample(10), b = letters[1:10]), 
               data.frame(growth = sample(10), b = letters[1:10]))
1 голос
/ 21 июня 2019

Мы можем использовать lapply с transform в base R

lapply(list_df, transform, difference = c(NA, diff(growth)))
#[[1]]
#   growth b difference
#1       3 a         NA
#2      10 b          7
#3       2 c         -8
#4       8 d          6
#5       6 e         -2
#6       9 f          3
#7       1 g         -8
#8       7 h          6
#9       5 i         -2
#10      4 j         -1

#[[2]]
#   growth b difference
#1      10 a         NA
#2       5 b         -5
#3       3 c         -2
#4       8 d          5
#5       1 e         -7
#6       4 f          3
#7       6 g          2
#8       9 h          3
#9       7 i         -2
#10      2 j         -5

data

set.seed(123)
list_df <- list(data.frame(growth = sample(10), b = letters[1:10]), 
               data.frame(growth = sample(10), b = letters[1:10]))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...