【问题标题】:how insert name of files in column in R [duplicate]如何在R的列中插入文件名[重复]
【发布时间】:2021-05-14 01:28:33
【问题描述】:

假设,我有这样的文件

rock=structure(list(x1 = c(0, 0.8, 0.4, 0.3, 0.5, 1, 0.7, 0.6, 0.4, 
0.4, 0.6), x2 = c(0, 1, 0.5, 0.3, 0.5, 0.5, 0.8, 0.3, 0.6, 0.8, 
0.7), x3 = c(0, 0.4, 0.8, 0.4, 0.2, 1, 0.5, 0.8, 0.4, 1, 0.3), 
    x4 = c(0, 0.3, 0.4, 0.4, 0.5, 0.6, 0.8, 0.3, 0.7, 0.6, 0.2
    )), class = "data.frame", row.names = c(NA, -11L))
rave=structure(list(x1 = c(0, 0.8, 0.4, 0.3, 0.5, 1), x2 = c(0, 1, 
0.5, 0.3, 0.5, 0.5), x3 = c(0, 0.4, 0.8, 0.4, 0.2, 1), x4 = c(0, 
0.3, 0.4, 0.4, 0.5, 0.6)), class = "data.frame", row.names = c(NA, 
-6L))
classic=structure(list(x1 = c(0, 0.8), x2 = 0:1, x3 = c(0, 0.4), x4 = c(0, 
0.3)), class = "data.frame", row.names = c(NA, -2L))

当我rbind这些数据集时,如何为每个数据集粘贴原始名称 即我想看到这样的结果。名称为 csv 格式的初始数据。例如

classic=read.csv(path to classic.csv)

   dataset  x1  x2  x3  x4
1  classic 0.0 0.0 0.0 0.0
2  classic 0.8 1.0 0.4 0.3
3     Rave 0.0 0.0 0.0 0.0
4     Rave 0.8 1.0 0.4 0.3
5     Rave 0.4 0.5 0.8 0.4
6     Rave 0.3 0.3 0.4 0.4
7     Rave 0.5 0.5 0.2 0.5
8     rock 0.0 0.0 0.0 0.0
9     rock 0.8 1.0 0.4 0.3
10    rock 0.4 0.5 0.8 0.4
11    rock 0.3 0.3 0.4 0.4
12    rock 0.5 0.5 0.2 0.5
13    rock 1.0 0.5 1.0 0.6
14    rock 0.7 0.8 0.5 0.8
15    rock 0.6 0.3 0.8 0.3
16    rock 0.4 0.6 0.4 0.7
17    rock 0.4 0.8 1.0 0.6
18    rock 0.6 0.7 0.3 0.2

【问题讨论】:

    标签: r dplyr


    【解决方案1】:

    您可以将具有常量名称的列添加到数据集中,然后 rbind 然后把最后一列放到第一个位置

    classic['dataset'] = 'classic'
    rave['dataset'] = 'rave'
    rock['dataset'] = 'rock'
    df <- rbind(classic, rave, rock)
    df <- df[,c(ncol(df), 1:ncol(df)-1)]
    

    【讨论】:

      【解决方案2】:

      将它们放在一个列表中并使用bind_rows

      library(dplyr)
      bind_rows(lst(rock, rave, classic), .id = 'dataset')
      
      #   dataset  x1  x2  x3  x4
      #1     rock 0.0 0.0 0.0 0.0
      #2     rock 0.8 1.0 0.4 0.3
      #3     rock 0.4 0.5 0.8 0.4
      #4     rock 0.3 0.3 0.4 0.4
      #5     rock 0.5 0.5 0.2 0.5
      #6     rock 1.0 0.5 1.0 0.6
      #7     rock 0.7 0.8 0.5 0.8
      #8     rock 0.6 0.3 0.8 0.3
      #9     rock 0.4 0.6 0.4 0.7
      #10    rock 0.4 0.8 1.0 0.6
      #11    rock 0.6 0.7 0.3 0.2
      #12    rave 0.0 0.0 0.0 0.0
      #13    rave 0.8 1.0 0.4 0.3
      #14    rave 0.4 0.5 0.8 0.4
      #15    rave 0.3 0.3 0.4 0.4
      #16    rave 0.5 0.5 0.2 0.5
      #17    rave 1.0 0.5 1.0 0.6
      #18 classic 0.0 0.0 0.0 0.0
      #19 classic 0.8 1.0 0.4 0.3
      

      但是,如果您可以自动读取列表中的数据而无需先单独读取它们,那会更好。

      library(dplyr)
      library(purrr)
      
      filenames <- list.files('/path/to/csv', pattern = '\\.csv', full.names = TRUE)
      
      result <- map_df(filenames, 
                       ~read.csv(.x) %>% 
                         mutate(dataset = tools::file_path_sans_ext(basename(.x))))
      

      【讨论】:

      • 是自动放置 csv 文件名称的方式。没有 lst?
      • 您可以在读取 csv 文件时添加新列。更新的答案有帮助吗?
      • 是的,有帮助,谢谢
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-11
      • 2021-01-12
      • 2014-08-20
      • 1970-01-01
      • 1970-01-01
      • 2014-07-31
      相关资源
      最近更新 更多