如何延迟和计算列表中每个数据框的差异?
How to lag and calculate difference for every data frame in a list?
我有一个包含 981 个数据帧的列表。每个 data.frame 具有相同的结构。
我想滞后一列(称为增长)来计算每个数据帧随时间的增长(从一个观察到另一个)。
我试过 lapply 不知何故无法完成。
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))
)
如果您无法共享真实数据,您可以创建一个假数据集以使 post 可重现。
如果我没理解错的话,下面是你可以用 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]))
我们可以在 base R
中使用 lapply
和 transform
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
数据
set.seed(123)
list_df <- list(data.frame(growth = sample(10), b = letters[1:10]),
data.frame(growth = sample(10), b = letters[1:10]))
我有一个包含 981 个数据帧的列表。每个 data.frame 具有相同的结构。
我想滞后一列(称为增长)来计算每个数据帧随时间的增长(从一个观察到另一个)。
我试过 lapply 不知何故无法完成。
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))
)
如果您无法共享真实数据,您可以创建一个假数据集以使 post 可重现。
如果我没理解错的话,下面是你可以用 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]))
我们可以在 base R
lapply
和 transform
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
数据
set.seed(123)
list_df <- list(data.frame(growth = sample(10), b = letters[1:10]),
data.frame(growth = sample(10), b = letters[1:10]))