如何使用R拆分列和移动列值

时间:2016-10-05 18:20:49

标签: r csv data-cleaning

我在这里提取了少量的csv文件。http://www.sharecsv.com/s/8ccf9c932f3cbf7def2a4fd4ea30c6f7/test.csv

Th  02:56:21    M14     N60321J     IVL     13  OCC     0   LQ  -112    BQ  0   EB0     LIT     1111
Th  02:56:21    M14     N60341D     IVL     14  OCC     0   LQ  -72     BQ  0   EB0     LIT     1111
Th  02:56:21    M14     N60421K     IVL     115     OCC     0   LQ  0   BQ  0   EB0     LIT     0
Th  02:56:21    M14     N60431E     IVL     12  OCC     0   LQ-3361     BQ  0   EB0     LIT     1111    
Th  02:56:21    M14     N60431E     IVL     13  OCC     0   LQ-3417     BQ  0   EB0     LIT     1111    

如何使用R来拆分列" V13"分为2列。以第一行为例,第一列代表文本" EB"和第二列代表数字" 0"。

此外,第4行和第5行的格式稍有变化。一切都应该换成一列。因为列" V9"应分为2列,第一列代表" LQ"第二个代表数字" -3361"

这是一个少量的数据集,我不确定文本在较大的文件中是否总是LQ和EB。

1 个答案:

答案 0 :(得分:0)

对于拆分列V13,您可以使用substring功能:

dataframe$V13a = substring(dataframe$V13,1,2) #For first 2 characters
dataframe$V13b = substring(dataframe$V13,3)  #For characters 3 onwards

在R中移位单元格是一个难以解决的问题,但您可以使用readLines()函数和一些预处理来执行此操作,然后将其提供给data.frame:

lines <- readLines("path_to_file.csv")
lines <- strsplit(lines, "(\\s+|(?<=[A-Z])(?=-))", perl=TRUE)
as.data.frame(do.call(rbind, lines))

strsplit根据正则表达式拆分每一行,一个或多个空格,或者如果一个字符后跟-。然后使用rbind,通过do.call(将rbind函数应用于行列表中的所有项)将其绑定到矩阵中,然后转换为data.frame。