将分号分隔的值替换为制表符

时间:2017-12-12 11:31:17

标签: r csv

我正在尝试转换我在txt文件中的数据:

4.0945725440979;4.07999897003174;4.0686674118042;4.05960083007813;4.05218315124512;...

到列(表),其中值由制表符分隔。

4.0945725440979
4.07999897003174
4.0686674118042...

到目前为止,我试过

mydata <- read.table("1.txt", header = FALSE)
separate_data<- strsplit(as.character(mydata), ";") 

但它不起作用。在这种情况下,separate_data仅包含1个元素:

[[1]]
[1] "1"

1 个答案:

答案 0 :(得分:0)

基于OP,没有直接说明原始数据文件是否包含单个变量的多个观察值,或者应该分解为n元组。由于OP确实声明read.table导致单行中s /他希望它包含多行,我们可以得出结论,正确的技术是使用scan(),而不是read.table()

如果原始数据文件中的数据代表单个变量,则@docendo在评论中发布的解决方案无需额外工作即可运行。否则,需要额外的工作来整理数据。

这是一种使用scan()将文件读入矢量的方法,并将其分解为包含5个变量的观测值。

rawData <- "4.0945725440979;4.07999897003174;4.0686674118042;4.05960083007813;4.05218315124512;4.0945725440979;4.07999897003174;4.0686674118042;4.05960083007813;4.05218315124512"

value <- scan(textConnection(rawData),sep=";")
columns <- 5 # set desired # of columns 
observations <- length(aVector) / columns 
observation <- unlist(lapply(1:observations,function(x) rep(x,times=columns)))
variable <- rep(1:columns,times=observations)

data.frame(observation,variable,value)

...和输出:

> data.frame(observation,variable,value)
   observation variable    value
1            1        1 4.094573
2            1        2 4.079999
3            1        3 4.068667
4            1        4 4.059601
5            1        5 4.052183
6            2        1 4.094573
7            2        2 4.079999
8            2        3 4.068667
9            2        4 4.059601
10           2        5 4.052183
> 

此时,数据可以转换为带有reshape2::dcast()的宽幅整洁数据集。

请注意,此解决方案要求原始数据文件中的数据值数量可以被变量数量整除。