r语言 - 循环遍历各种数据帧列表,在每个数据帧中创建一个变量



我有四个列表,每个列表包含12个数据帧。像这样:'

for (i in 1:10) {
assign(paste0("df", i), data.frame(c=c(1,2,3), d=c(1,2,3), 
e=c(1,2,3), e=c(1,2,3),
g=c(1,2,3), h=c(1,2,3), 
i=c(1,2,3), j=c(1,2,3),
k=c(1,2,3), l=c(1,2,3)))
}
for (i in 1:4) {
assign(paste0("list_", i), lapply(ls(pattern="df"), get))
}

rm(list=ls(pattern="df"))

每个列表对应一年,其中的每个元素(数据帧)对应一个月。方便地说,列表(每个数据帧)中每个元素的位置等于它的月份。因此,在第一个列表中,第一个数据帧对应于2020年1月,第二个对应于2020年2月,依此类推。在第二个列表中,第一个数据帧对应于2021年1月,第二个数据帧对应于2021年2月,依此类推。

我需要做的是创建一个新变量来指示每个数据帧的月份。

我一直在尝试不同的东西,包括这个:

for(j in 20:21) {
for(i in 1:12) {
assign(get(paste0("df_20", j))[[i]], 
get(paste0("df_20", j))[[i]] %>% 
mutate(month=i)) ## se le suma 1 al mes porque comienza desde febrero
}
}

但是什么都没用。问题似乎出在作业的左边。当我使用get()函数时,软件返回一个错误(" error in assign(get(paste0("mies_20", j))[[1]], get(paste0("mies_20",:无效的第一个参数")。如果不包含此函数,则paste0("df_20", j))[[I]]无法识别"[[I]]"

任何想法?

get()每个列表,使用lapply()迭代其数据帧,然后分配回环境。对于您的迭代变量,最好使用i以外的东西,因为在您的数据框架中也有一个列i

library(dplyr)
for (j in 1:4) {
list_j <- get(paste0("list_", j))
list_j <- lapply(
seq_along(list_j),
(mnth) mutate(list_j[[mnth]], month = mnth)
)
assign(paste0("list_", j), list_j)
}
list_1
[[1]]
c d e f g h i j k l month
1 1 1 1 1 1 1 1 1 1 1     1
2 2 2 2 2 2 2 2 2 2 2     1
3 3 3 3 3 3 3 3 3 3 3     1
[[2]]
c d e f g h i j k l month
1 1 1 1 1 1 1 1 1 1 1     2
2 2 2 2 2 2 2 2 2 2 2     2
3 3 3 3 3 3 3 3 3 3 3     2
[[3]]
c d e f g h i j k l month
1 1 1 1 1 1 1 1 1 1 1     3
2 2 2 2 2 2 2 2 2 2 2     3
3 3 3 3 3 3 3 3 3 3 3     3
[[4]]
c d e f g h i j k l month
1 1 1 1 1 1 1 1 1 1 1     4
2 2 2 2 2 2 2 2 2 2 2     4
3 3 3 3 3 3 3 3 3 3 3     4
[[5]]
c d e f g h i j k l month
1 1 1 1 1 1 1 1 1 1 1     5
2 2 2 2 2 2 2 2 2 2 2     5
3 3 3 3 3 3 3 3 3 3 3     5
[[6]]
c d e f g h i j k l month
1 1 1 1 1 1 1 1 1 1 1     6
2 2 2 2 2 2 2 2 2 2 2     6
3 3 3 3 3 3 3 3 3 3 3     6
[[7]]
c d e f g h i j k l month
1 1 1 1 1 1 1 1 1 1 1     7
2 2 2 2 2 2 2 2 2 2 2     7
3 3 3 3 3 3 3 3 3 3 3     7
[[8]]
c d e f g h i j k l month
1 1 1 1 1 1 1 1 1 1 1     8
2 2 2 2 2 2 2 2 2 2 2     8
3 3 3 3 3 3 3 3 3 3 3     8
[[9]]
c d e f g h i j k l month
1 1 1 1 1 1 1 1 1 1 1     9
2 2 2 2 2 2 2 2 2 2 2     9
3 3 3 3 3 3 3 3 3 3 3     9
[[10]]
c d e f g h i j k l month
1 1 1 1 1 1 1 1 1 1 1    10
2 2 2 2 2 2 2 2 2 2 2    10
3 3 3 3 3 3 3 3 3 3 3    10

最新更新