按列拆分多个数据帧,并保存为不同的数据帧
Split many dataframes by a column, and save as different dataframes
我有很多数据框。我想根据列中的值(一个因素)拆分它们。然后我想将拆分结果存储在具有特定名称的单独数据框中。
为了 mrp,考虑一些生成的数据,
for (i in 1:10) {
assign(paste("df_",i,sep = ""), data.frame(x = rep(1,12), y = c(rep("a",4),rep("b",4),rep("c",4))))
}
这里我们有 10 个 dfs,df_1,df_2... 到 df_10。 (真实数据与生成数据相似,但在真实数据中,每个 df 的 z 列不同)。
现在,我想将 dfs 拆分为 'y'(第 2 列)。
对于 1 个 df,我可以执行以下操作;
splitdf <- split(df_1,df_1$y)
namessplit <- c("a","b","c")
for (i in 1:length(splitdf)) {
assign(paste("df_1_",namessplit[[i]],sep = ""),splitdf[[i]])
}
虽然这适用于 1 个 df,但我如何才能对所有 df 执行此操作?
非常感谢!
不建议在全局环境中创建多个对象,但如果我们想知道如何从嵌套列表创建对象 - 循环外部列表序列,然后在内部列表序列中,paste
assign
提取的内部列表元素的对应名称
lst1 <- lapply(mget(ls(pattern = "^df_\d+$")), \(x) split(x, x$y))
for(i in seq_along(lst1)) {
for(j in seq_along(lst1[[i]])) {
assign(paste0(names(lst1)[i], "_", names(lst1[[i]][j])), lst1[[i]][[j]])
}
}
-检查在全局环境中创建的对象
> ls(pattern = "^df_\d+_[a-z]+$")
[1] "df_1_a" "df_1_b" "df_1_c" "df_10_a" "df_10_b" "df_10_c" "df_2_a" "df_2_b" "df_2_c" "df_3_a" "df_3_b" "df_3_c" "df_4_a"
[14] "df_4_b" "df_4_c" "df_5_a" "df_5_b" "df_5_c" "df_6_a" "df_6_b" "df_6_c" "df_7_a" "df_7_b" "df_7_c" "df_8_a" "df_8_b"
[27] "df_8_c" "df_9_a" "df_9_b" "df_9_c"
我有很多数据框。我想根据列中的值(一个因素)拆分它们。然后我想将拆分结果存储在具有特定名称的单独数据框中。
为了 mrp,考虑一些生成的数据,
for (i in 1:10) {
assign(paste("df_",i,sep = ""), data.frame(x = rep(1,12), y = c(rep("a",4),rep("b",4),rep("c",4))))
}
这里我们有 10 个 dfs,df_1,df_2... 到 df_10。 (真实数据与生成数据相似,但在真实数据中,每个 df 的 z 列不同)。
现在,我想将 dfs 拆分为 'y'(第 2 列)。
对于 1 个 df,我可以执行以下操作;
splitdf <- split(df_1,df_1$y)
namessplit <- c("a","b","c")
for (i in 1:length(splitdf)) {
assign(paste("df_1_",namessplit[[i]],sep = ""),splitdf[[i]])
}
虽然这适用于 1 个 df,但我如何才能对所有 df 执行此操作?
非常感谢!
不建议在全局环境中创建多个对象,但如果我们想知道如何从嵌套列表创建对象 - 循环外部列表序列,然后在内部列表序列中,paste
assign
提取的内部列表元素的对应名称
lst1 <- lapply(mget(ls(pattern = "^df_\d+$")), \(x) split(x, x$y))
for(i in seq_along(lst1)) {
for(j in seq_along(lst1[[i]])) {
assign(paste0(names(lst1)[i], "_", names(lst1[[i]][j])), lst1[[i]][[j]])
}
}
-检查在全局环境中创建的对象
> ls(pattern = "^df_\d+_[a-z]+$")
[1] "df_1_a" "df_1_b" "df_1_c" "df_10_a" "df_10_b" "df_10_c" "df_2_a" "df_2_b" "df_2_c" "df_3_a" "df_3_b" "df_3_c" "df_4_a"
[14] "df_4_b" "df_4_c" "df_5_a" "df_5_b" "df_5_c" "df_6_a" "df_6_b" "df_6_c" "df_7_a" "df_7_b" "df_7_c" "df_8_a" "df_8_b"
[27] "df_8_c" "df_9_a" "df_9_b" "df_9_c"