我在这里提取了少量的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。
答案 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。