r语言 - 来自多个.csv文件(存储在同一个文件夹中)的一列数据可以编译成一个列吗?



我想从几个(很多!).csv文件中获取一些列,并构建一个新的.csv文件,其中所有列都堆叠在一起。所有的.csv文件都在一个文件夹中,除了一列数据之外几乎是相同的。大多数列需要保持完全相同,但需要从其中一个列的标题中的名称生成一个新列(这是唯一的标题将发生变化),我想删除一些不需要的数据列。下面是一个我希望发生的事情的例子,但简化为只有两个数据集:

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 

可以看到,Time列的唯一标头被移到了新列中。我一直在尝试这样做,或者通过从文件夹中的所有文件创建一个列表,然后尝试使用rbind绑定它们来完成此过程的某些部分。

temp <- list.files(pattern="*.csv")
myfiles = lapply(temp,read.csv)
df <- do.call(rbind, 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'))

我认为你应该使用bind_rowsdplyr包:

library(dplyr)
df <- bind_rows(myfiles)

相关内容

  • 没有找到相关文章

最新更新