将数据框列表组合成 R 中的新数据框
Combining a list of data frames into a new data frame in R
这是对问题的第 3 次编辑(以防万一,留在下面的线程):
下面的代码制作了一些示例数据框,选择标题中带有“_areaX”的那些并制作它们的列表。然后目标是将列表中的数据框组合成 1 个数据框。它几乎可以工作...
Area1 <- 100
Area2 <- 200
Area3 <- 300
Zone <- 3
a1_areaX <- data.frame(Area1)
a2_areaX <- data.frame(Area2)
a3_areaX <- data.frame(Area3)
a_zoneX <- data.frame(Zone)
library(dplyr)
pattern = "_areaX"
df_list <- mget(ls(envir = globalenv(), pattern = pattern))
big_data = bind_rows(df_list, .id = "FileName")
问题是新创建的数据框如下所示:
我需要它看起来像这样:
File Name
Area measurement
a1_areaX
100
a2_areaX
200
a3_areaX
300
以下是我早些时候尝试提出这个问题的尝试。从第一个版本编辑:
我将 csv 文件导入到 R Global Env 中,看起来像这样(我会共享实际文件,但似乎没有办法在这里执行此操作):
他们都有一个名字,上面那个叫“s6_section_area”。它们有很多(名称不同),我使用以下代码将它们全部放在一个列表中:
pattern = "section_area"
section_area_list <- list(mget(grep(pattern,ls(globalenv()), value = TRUE), globalenv()))
现在我想要一个看起来像这样的新数据框,将上面列表中的数据框放在一起。
File Name
Area measurement
a1_section_area
a number
a2_section_area
another number
many more
more numbers
因此,第一列应列出原始文件的名称,第二列应列出该文件中提供的测量值。
希望这更清楚 - 不确定如何在不共享实际文件的情况下提供可重现的示例(这似乎不是一个选项)。
补充编辑:使用此代码
section_area_data <- bind_rows(section_area_list, .id = "FileName")
我明白了(它继续向右)
我正在寻找一个看起来像上面示例的 table,左栏是文件名,下面是文件名列表。右栏是该文件名的测量值(取自原始文件)。
请注意,在您的数据框列表 (df_list
) 中,所有列都有不同的名称(Area1
、Area2
、Area3
),而在您的输出数据框中,它们所有这些都合并到一个单独的列中。因此,为此您需要将不同的列名称更改为相同的名称并将数据帧绑定在一起。
library(dplyr)
library(purrr)
result <- map_df(df_list, ~.x %>%
rename_with(~"Area", contains('Area')), .id = 'FileName')
result
# FileName Area
#1 a1_areaX 100
#2 a2_areaX 200
#3 a3_areaX 300
感谢大家的建议。最后,我结合了这些建议和更多的思考,想出了这个完美的作品。
library("dplyr")
pattern = "section_area"
section_area_list <- mget(ls(envir = globalenv(), pattern = pattern))
section_area_data <- bind_rows(section_area_list, .id = "FileName") %>%
select(-V1)
因此,将一堆 csv 文件导入到 R Global Env 中。生成了名称以“section_area”结尾的所有文件的列表。这些文件然后被绑定到一个大数据框中,文件名作为一列,值(在这种情况下为面积测量)在另一列中(原始 csv 文件中有一个毫无意义的列,称为“V1”,我删除了).
这是众多 csv 文件之一的样子
sample csv file
这是最终数据框的布局(大约有 150 行)
final data frame
这是对问题的第 3 次编辑(以防万一,留在下面的线程):
下面的代码制作了一些示例数据框,选择标题中带有“_areaX”的那些并制作它们的列表。然后目标是将列表中的数据框组合成 1 个数据框。它几乎可以工作...
Area1 <- 100
Area2 <- 200
Area3 <- 300
Zone <- 3
a1_areaX <- data.frame(Area1)
a2_areaX <- data.frame(Area2)
a3_areaX <- data.frame(Area3)
a_zoneX <- data.frame(Zone)
library(dplyr)
pattern = "_areaX"
df_list <- mget(ls(envir = globalenv(), pattern = pattern))
big_data = bind_rows(df_list, .id = "FileName")
问题是新创建的数据框如下所示:
我需要它看起来像这样:
File Name | Area measurement |
---|---|
a1_areaX | 100 |
a2_areaX | 200 |
a3_areaX | 300 |
以下是我早些时候尝试提出这个问题的尝试。从第一个版本编辑:
我将 csv 文件导入到 R Global Env 中,看起来像这样(我会共享实际文件,但似乎没有办法在这里执行此操作):
他们都有一个名字,上面那个叫“s6_section_area”。它们有很多(名称不同),我使用以下代码将它们全部放在一个列表中:
pattern = "section_area"
section_area_list <- list(mget(grep(pattern,ls(globalenv()), value = TRUE), globalenv()))
现在我想要一个看起来像这样的新数据框,将上面列表中的数据框放在一起。
File Name | Area measurement |
---|---|
a1_section_area | a number |
a2_section_area | another number |
many more | more numbers |
因此,第一列应列出原始文件的名称,第二列应列出该文件中提供的测量值。
希望这更清楚 - 不确定如何在不共享实际文件的情况下提供可重现的示例(这似乎不是一个选项)。
补充编辑:使用此代码
section_area_data <- bind_rows(section_area_list, .id = "FileName")
我明白了(它继续向右)
我正在寻找一个看起来像上面示例的 table,左栏是文件名,下面是文件名列表。右栏是该文件名的测量值(取自原始文件)。
请注意,在您的数据框列表 (df_list
) 中,所有列都有不同的名称(Area1
、Area2
、Area3
),而在您的输出数据框中,它们所有这些都合并到一个单独的列中。因此,为此您需要将不同的列名称更改为相同的名称并将数据帧绑定在一起。
library(dplyr)
library(purrr)
result <- map_df(df_list, ~.x %>%
rename_with(~"Area", contains('Area')), .id = 'FileName')
result
# FileName Area
#1 a1_areaX 100
#2 a2_areaX 200
#3 a3_areaX 300
感谢大家的建议。最后,我结合了这些建议和更多的思考,想出了这个完美的作品。
library("dplyr")
pattern = "section_area"
section_area_list <- mget(ls(envir = globalenv(), pattern = pattern))
section_area_data <- bind_rows(section_area_list, .id = "FileName") %>%
select(-V1)
因此,将一堆 csv 文件导入到 R Global Env 中。生成了名称以“section_area”结尾的所有文件的列表。这些文件然后被绑定到一个大数据框中,文件名作为一列,值(在这种情况下为面积测量)在另一列中(原始 csv 文件中有一个毫无意义的列,称为“V1”,我删除了).
这是众多 csv 文件之一的样子 sample csv file
这是最终数据框的布局(大约有 150 行) final data frame