来自多个 .csv 文件(存储在同一文件夹中)的一列数据是否可以编译成一列?
Can a column of data from several .csv files (stored in the same folder) be compiled into a single column?
我想从几个(很多!).csv 文件中提取一些列,并构建一个新的 .csv 文件,其中所有列都堆叠在一起。所有 .csv 文件都在一个文件夹中,除了一列数据外几乎完全相同。大多数列需要保持完全相同,但需要从其中一列的 header 中的名称生成一个新列(这是唯一将要更改的 header),我想删除一些不需要的数据列。这是我希望发生但仅简化为两个数据集的示例:
Data set 1
X date distance.code location.code Time1 unneeded.data
1 2021/05/18 C BSF1 0.715 999
2 2021/05/18 30 BSF1 0.896 999
3 2021/05/18 60 BSF1 0.803 999
4 2021/05/18 120 BSF1 0.705 999
5 2021/05/18 C BSG1 0.563 999
6 2021/05/18 C BSG1 0.961 999
7 2021/05/18 30 BSG1 0.833 999
8 2021/05/18 60 BSG1 0.894 999
data set 2
X date distance.code location.code Time2 unneeded data
1 2021/05/18 C BSF1 0.806 999
2 2021/05/18 30 BSF1 0.878 999
3 2021/05/18 60 BSF1 0.625 999
4 2021/05/18 120 BSF1 0.609 999
5 2021/05/18 C BSG1 0.766 999
6 2021/05/18 C BSG1 0.846 999
7 2021/05/18 30 BSG1 0.856 999
8 2021/05/18 60 BSG1 0.698 999
Combined datasets (this is what I want)
X date distance.code location.code timeperiod Values
1 2021/05/18 C BSF1 Time1 0.715
2 2021/05/18 30 BSF1 Time1 0.896
3 2021/05/18 60 BSF1 Time1 0.803
4 2021/05/18 120 BSF1 Time1 0.705
5 2021/05/18 C BSG1 Time1 0.563
6 2021/05/18 C BSG1 Time1 0.961
7 2021/05/18 30 BSG1 Time1 0.833
8 2021/05/18 60 BSG1 Time1 0.894
1 2021/05/18 C BSF1 Time2 0.806
2 2021/05/18 30 BSF1 Time2 0.878
3 2021/05/18 60 BSF1 Time2 0.625
4 2021/05/18 120 BSF1 Time2 0.609
5 2021/05/18 C BSG1 Time2 0.766
6 2021/05/18 C BSG1 Time2 0.846
7 2021/05/18 30 BSG1 Time2 0.856
8 2021/05/18 60 BSG1 Time2 0.698
如您所见,时间列的唯一 header 已移至新列。我一直在尝试通过从文件夹中的所有文件创建一个列表然后尝试将它们与 rbind 绑定来完成此过程或此过程的某些部分。
temp <- list.files(pattern="*.csv")
myfiles = lapply(temp,read.csv)
df <- do.call(rbind, myfiles)
这没有用,但看起来像 should.Also,这甚至不能完成我想要的所有事情,但我不确定如何获得具有唯一时间代码的新列。我认为这可能是一种混乱的方式,我希望有一个更优雅的解决方案。感谢您的帮助。
我认为你应该使用 dplyr
包中的 bind_rows
:
library(dplyr)
df <- bind_rows(myfiles)
您可以 select
最终数据中的所需列,并使用 pivot_longer
获取长格式数据。使用 map_df
您可以将列表合并到一个数据框中。
library(dplyr)
library(purrr)
temp <- list.files(pattern="*.csv")
myfiles = lapply(temp,read.csv)
cols_to_keep <- c('X', 'date','distance.code', 'location.code')
combine_data <- map_df(myfiles, ~.x %>%
select(all_of(cols_to_keep), starts_with('Time')) %>%
pivot_longer(cols = starts_with('Time'),
names_to = 'timeperiod',
values_to = 'Values'))
我想从几个(很多!).csv 文件中提取一些列,并构建一个新的 .csv 文件,其中所有列都堆叠在一起。所有 .csv 文件都在一个文件夹中,除了一列数据外几乎完全相同。大多数列需要保持完全相同,但需要从其中一列的 header 中的名称生成一个新列(这是唯一将要更改的 header),我想删除一些不需要的数据列。这是我希望发生但仅简化为两个数据集的示例:
Data set 1
X date distance.code location.code Time1 unneeded.data
1 2021/05/18 C BSF1 0.715 999
2 2021/05/18 30 BSF1 0.896 999
3 2021/05/18 60 BSF1 0.803 999
4 2021/05/18 120 BSF1 0.705 999
5 2021/05/18 C BSG1 0.563 999
6 2021/05/18 C BSG1 0.961 999
7 2021/05/18 30 BSG1 0.833 999
8 2021/05/18 60 BSG1 0.894 999
data set 2
X date distance.code location.code Time2 unneeded data
1 2021/05/18 C BSF1 0.806 999
2 2021/05/18 30 BSF1 0.878 999
3 2021/05/18 60 BSF1 0.625 999
4 2021/05/18 120 BSF1 0.609 999
5 2021/05/18 C BSG1 0.766 999
6 2021/05/18 C BSG1 0.846 999
7 2021/05/18 30 BSG1 0.856 999
8 2021/05/18 60 BSG1 0.698 999
Combined datasets (this is what I want)
X date distance.code location.code timeperiod Values
1 2021/05/18 C BSF1 Time1 0.715
2 2021/05/18 30 BSF1 Time1 0.896
3 2021/05/18 60 BSF1 Time1 0.803
4 2021/05/18 120 BSF1 Time1 0.705
5 2021/05/18 C BSG1 Time1 0.563
6 2021/05/18 C BSG1 Time1 0.961
7 2021/05/18 30 BSG1 Time1 0.833
8 2021/05/18 60 BSG1 Time1 0.894
1 2021/05/18 C BSF1 Time2 0.806
2 2021/05/18 30 BSF1 Time2 0.878
3 2021/05/18 60 BSF1 Time2 0.625
4 2021/05/18 120 BSF1 Time2 0.609
5 2021/05/18 C BSG1 Time2 0.766
6 2021/05/18 C BSG1 Time2 0.846
7 2021/05/18 30 BSG1 Time2 0.856
8 2021/05/18 60 BSG1 Time2 0.698
如您所见,时间列的唯一 header 已移至新列。我一直在尝试通过从文件夹中的所有文件创建一个列表然后尝试将它们与 rbind 绑定来完成此过程或此过程的某些部分。
temp <- list.files(pattern="*.csv")
myfiles = lapply(temp,read.csv)
df <- do.call(rbind, myfiles)
这没有用,但看起来像 should.Also,这甚至不能完成我想要的所有事情,但我不确定如何获得具有唯一时间代码的新列。我认为这可能是一种混乱的方式,我希望有一个更优雅的解决方案。感谢您的帮助。
我认为你应该使用 dplyr
包中的 bind_rows
:
library(dplyr)
df <- bind_rows(myfiles)
您可以 select
最终数据中的所需列,并使用 pivot_longer
获取长格式数据。使用 map_df
您可以将列表合并到一个数据框中。
library(dplyr)
library(purrr)
temp <- list.files(pattern="*.csv")
myfiles = lapply(temp,read.csv)
cols_to_keep <- c('X', 'date','distance.code', 'location.code')
combine_data <- map_df(myfiles, ~.x %>%
select(all_of(cols_to_keep), starts_with('Time')) %>%
pivot_longer(cols = starts_with('Time'),
names_to = 'timeperiod',
values_to = 'Values'))