【问题标题】:Ordering my csv dataframe that has values saparated by "|" in R?订购值由“|”分隔的 csv 数据框在 R?
【发布时间】:2021-05-27 21:49:23
【问题描述】:

我已经用以下代码合并了多个 CSV 文件:

library(data.table)
setwd("C:\\Users\\jessi\\Desktop\\Selenium\\TASK 001\\Extracted CSV\\test_batch")
files <- list.files(pattern = ".csv")
temp <- lapply(files, fread, sep="")
data <- rbindlist(temp)
write.csv(data, file="rmergeoutput2.csv", row.names = FALSE)

我的条目保存在每一行的一个单元格中,并用“|”分隔如下:

Year|RecID|ParID|ConParID|Country|Divisi..............
1861|2549365|281|186|ENG|I|London (Parts Of Middlesex.....
1861|9|1|1|ENG|I|London (Parts Of Middlesex, Surrey ..........
1851|2549365|281|186|ENG|I|London (Parts Of Middlesex.....
1851|9|1|1|ENG|I|London (Parts Of Middlesex, Surrey ..........

我的数据框没有排序,我想按升序排序。特别是,我希望 Year、RecID、ParID、ConParID 都以有序的方式显示。我怎样才能做到这一点?我试过 order(data) 没有成功。

【问题讨论】:

    标签: r dataframe csv data-cleaning


    【解决方案1】:

    您可以在保存文件之前将其包含在内。 (我缩短了其余数据,即点“.....”)

    tmp <- tempfile()
    writeLines(text = c("Year|RecID|ParID|ConParID|Country|Divisiion|rest",
    "1861|2549365|281|186|ENG|I|London (Parts Of Middlesex",
    "1861|9|1|1|ENG|I|London (Parts Of Middlesex, Surrey",
    "1851|2549365|281|186|ENG|I|London (Parts Of Middlesex",
    "1851|9|1|1|ENG|I|London (Parts Of Middlesex, Surrey"),
    con = tmp)
    
    
    data <- fread(file = tmp, sep = "|")
    
    data2 <- data[order(Year, RecID, ParID, ConParID)]
    
    write.table(x = data2,file = tmp, sep = "|",quote = FALSE, row.names = FALSE)
    readLines(tmp)
    
    
    [1] "Year|RecID|ParID|ConParID|Country|Divisiion|rest"     
    [2] "1851|9|1|1|ENG|I|London (Parts Of Middlesex, Surrey"  
    [3] "1851|2549365|281|186|ENG|I|London (Parts Of Middlesex"
    [4] "1861|9|1|1|ENG|I|London (Parts Of Middlesex, Surrey"  
    [5] "1861|2549365|281|186|ENG|I|London (Parts Of Middlesex"
    

    【讨论】:

      【解决方案2】:

      您的数据似乎是用竖线分隔的。使用sep = '|' 作为fread 函数的参数。这会将您的数据读入单独的列,而不是每行一个字符串。然后,您可以像往常一样对数据进行排序——使用orderdplyr::arrangedata.table, shown in this answer 中的各种选项。

      【讨论】:

      • 这符合您的建议吗:? library(data.table) library(tidyverse) setwd("C:\\Users\\jessi\\Desktop\\Selenium\\TASK 001\\Extracted CSV\\test_batch") files &lt;- list.files(pattern = ".csv") temp &lt;- lapply(files, fread, sep="|") data &lt;- rbindlist(temp) order(data) write.csv(data, file="rmergeoutput2.csv", row.names = FALSE)
      • 差不多了;我会在下面添加@Jacob Gepp 提供的部分来进行排序:data2 &lt;- data[order(Year, RecID, ParID, ConParID)]
      • 我明白了,应该是这样的:library(data.table) setwd("C:\\Users\\jessi\\Desktop\\Selenium\\TASK 001\\Extracted CSV\\test_batch") files &lt;- list.files(pattern = ".csv") temp &lt;- lapply(files, fread, sep="|") data &lt;- rbindlist(temp) data2 &lt;- data[order(Year, RecID, ParID, ConParID)] write.csv(data2, file="rmergeoutput2.csv", row.names = FALSE) 我会运行它并更新你。感谢您的帮助。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多