使用for循环将列表转换为数据框并在R中以不同名称保存
Convert LIst To Dataframe Using For Loop And Saving Under Different Names In R
我正在尝试将包含 52 个组件的列表转换为每个组件的数据框。
不使用 for 循环会看起来像这样很乏味:
df1 = as.data.frame(list[1])
df2 = as.data.frame(list[2])
df3 = as.data.frame(list[3])
.
.
.
df50 = as.data.frame(list[50])
如何使用 for 循环实现此目的?我的尝试:
for (i in seq_along(list)) {
noquote(paste0("df", i)) = as.data.frame(list[i])
}
Error: target of assignment expands to non-language objec
我想我必须加入 assign
。
如果您在 list
中有数据帧列表,您可以命名它们,然后使用 list2env
将它们作为环境中的单独数据帧。
names(list) <- paste0('df', seq_along(list))
list2env(list, .GlobalEnv)
使用可重现的例子,
temp <- list(mtcars, mtcars)
names(temp) <- paste0('df', seq_along(temp))
list2env(temp, .GlobalEnv)
head(df1)
# mpg cyl disp hp drat wt qsec vs am gear carb
#Mazda RX4 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4
#Mazda RX4 Wag 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4
#Datsun 710 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1
#Hornet 4 Drive 21.4 6 258 110 3.08 3.215 19.44 1 0 3 1
#Hornet Sportabout 18.7 8 360 175 3.15 3.440 17.02 0 0 3 2
#Valiant 18.1 6 225 105 2.76 3.460 20.22 1 0 3 1
head(df2)
# mpg cyl disp hp drat wt qsec vs am gear carb
#Mazda RX4 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4
#Mazda RX4 Wag 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4
#Datsun 710 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1
#Hornet 4 Drive 21.4 6 258 110 3.08 3.215 19.44 1 0 3 1
#Hornet Sportabout 18.7 8 360 175 3.15 3.440 17.02 0 0 3 2
#Valiant 18.1 6 225 105 2.76 3.460 20.22 1 0 3 1
但是,请注意
list
是 R 中的内部函数,因此最好将变量命名为其他名称。
- 正如@MrFlick 建议的那样,尝试将数据保存在列表中,因为列表比在全局环境中创建大量对象更易于管理。
我们可以使用 assign
而不是 OP 函数中的 noquote
for (i in seq_along(list)) {
assign(paste0("df", i), value = list[[i]])
}
我正在尝试将包含 52 个组件的列表转换为每个组件的数据框。 不使用 for 循环会看起来像这样很乏味:
df1 = as.data.frame(list[1])
df2 = as.data.frame(list[2])
df3 = as.data.frame(list[3])
.
.
.
df50 = as.data.frame(list[50])
如何使用 for 循环实现此目的?我的尝试:
for (i in seq_along(list)) {
noquote(paste0("df", i)) = as.data.frame(list[i])
}
Error: target of assignment expands to non-language objec
我想我必须加入 assign
。
如果您在 list
中有数据帧列表,您可以命名它们,然后使用 list2env
将它们作为环境中的单独数据帧。
names(list) <- paste0('df', seq_along(list))
list2env(list, .GlobalEnv)
使用可重现的例子,
temp <- list(mtcars, mtcars)
names(temp) <- paste0('df', seq_along(temp))
list2env(temp, .GlobalEnv)
head(df1)
# mpg cyl disp hp drat wt qsec vs am gear carb
#Mazda RX4 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4
#Mazda RX4 Wag 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4
#Datsun 710 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1
#Hornet 4 Drive 21.4 6 258 110 3.08 3.215 19.44 1 0 3 1
#Hornet Sportabout 18.7 8 360 175 3.15 3.440 17.02 0 0 3 2
#Valiant 18.1 6 225 105 2.76 3.460 20.22 1 0 3 1
head(df2)
# mpg cyl disp hp drat wt qsec vs am gear carb
#Mazda RX4 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4
#Mazda RX4 Wag 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4
#Datsun 710 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1
#Hornet 4 Drive 21.4 6 258 110 3.08 3.215 19.44 1 0 3 1
#Hornet Sportabout 18.7 8 360 175 3.15 3.440 17.02 0 0 3 2
#Valiant 18.1 6 225 105 2.76 3.460 20.22 1 0 3 1
但是,请注意
list
是 R 中的内部函数,因此最好将变量命名为其他名称。- 正如@MrFlick 建议的那样,尝试将数据保存在列表中,因为列表比在全局环境中创建大量对象更易于管理。
我们可以使用 assign
而不是 OP 函数中的 noquote
for (i in seq_along(list)) {
assign(paste0("df", i), value = list[[i]])
}