【问题标题】:Import text file separated by new line导入由新行分隔的文本文件
【发布时间】:2018-04-01 08:33:39
【问题描述】:

最终,我需要创建下表:

ID Age Gender
1  25  F
2  14  M

等等。 . .

我在许多 txt 文件中获取了我的数据,其中 ID 是文件的名称。 Age 和 Gender 用换行符分隔,例如:

Age: 25
Gender: F

现在,我将所有文件合并到一个数据表中,其中文件路径作为 ID 列(稍后我将使用 stringr 摆脱整个路径)

all_test <- list.files(path = "my/file/path", full.names=T)
dtt <- rbindlist( sapply(all_test, fread, simplify = FALSE, sep=":", sep2=" "),use.names = TRUE, idcol = "ID" )

这是我的问题 - 我得到下表:

ID V1     V2
1  Age    25
2  Gender F

我尝试使用sep = "\n",但它什么也没做。如何告诉 R 每个变量在不同的行中? (最好有data.table)

【问题讨论】:

    标签: r data.table sapply rbindlist


    【解决方案1】:

    一种可能的方法是使用dcast 重塑为宽格式,并使用type.convert 将列放入正确的类中:

    DTnew <- dcast(DT, ID ~ V1, value.var = 'V2')[, (2:3) := lapply(.SD, type.convert), .SDcols = 2:3][]
    

    给出:

    > DTnew
       ID Age Gender
    1:  1  25      F
    2:  2  14      M
    
    > str(DTnew)
    Classes ‘data.table’ and 'data.frame':    2 obs. of  3 variables:
     $ ID    : int  1 2
     $ Age   : int  25 14
     $ Gender: Factor w/ 2 levels "F","M": 1 2
     - attr(*, ".internal.selfref")=<externalptr> 
     - attr(*, "sorted")= chr "ID"
    

    示例数据:

    DT1 <- fread('Age: 25
                  Gender: F', sep = ':')
    DT2 <- fread('Age: 14
                  Gender: M', sep = ':')
    DT <- rbindlist(list(DT1, DT2), idcol = 'ID')
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多