如何在R中逐行创建数据框并同时命名数据框?[关闭]

falq053o  于 2024-01-03  发布在  其他
关注(0)|答案(3)|浏览(104)

已关闭,此问题需要details or clarity,目前不接受回答。
**想要改进此问题吗?**通过editing this post添加详细信息并澄清问题。

13天前关闭
此帖子已于12天前编辑并提交审核,未能重新打开帖子:
原始关闭原因未解决
Improve this question
以下是原始 Dataframe :

df <- data.frame(
  A = c(1, 2, 3),
  B = c("TEST", "YEAR", "TELL"),
  C = c(TRUE, FALSE, TRUE))

字符串
预期的三个 Dataframe 如下:

TEST <- data.frame(df[1,])
YEAR <- data.frame(df[2,])
TELL <- data.frame(df[3,])


如何在R中轻松生成预期的 Dataframe (因为我有几百行原始矩阵)?

kuuvgm7e

kuuvgm7e1#

这通常不是在全局环境中添加大量对象的理想解决方案,我建议将它们保留在列表中。要做到这一点,您可以使用asplit

list_df <- setNames(asplit(df, 1), df$B)

字符串
但是如果你更喜欢在全局环境中将这些行作为单一对象,那么你可以使用list2env

list2env(list_df, .GlobalEnv)

xlpyo6sf

xlpyo6sf2#

从给定的 Dataframe df中,我们创建一个包含 Dataframe 名称的列表。为此,我们使用基R split(与dplyr中的group_split相反,这里的名称保持不变)。然后我们使用walkmy_list的名称。对于每个名称,assign用于在全局环境中创建一个同名变量,并将my_list中的相应 Dataframe 分配给该变量。

library(purrr)
library(dplyr)

my_list <- df %>% 
  split(.$B)

walk(names(my_list), ~ assign(.x, my_list[[.x]], envir = .GlobalEnv))

TELL
TEST
YEAR

字符串
产出:

> TELL
  A    B    C
3 3 TELL TRUE
> TEST
  A    B    C
1 1 TEST TRUE
> YEAR
  A    B     C
2 2 YEAR FALSE

> class(TELL)
[1] "data.frame"

js4nwp54

js4nwp543#

您可以考虑依赖于lapply()的管道版本

lapply(seq(nrow(df)), FUN = \(i) data.frame(df[i, ])) |>
  setNames(object = _, nm = df$B) |>
  list2env(x = _, envir = .GlobalEnv)

字符串
结果是

使用split()的嵌套替代方案:

list2env(setNames(split(df, seq(nrow(df))), df$B), .GlobalEnv)

相关问题