读取制表符分隔的数据集有错误

时间:2018-10-26 18:44:06

标签: r csv import

我对某些包含制表符分隔数据的数据集有一点问题,但是不幸的是原始数据中存在一些错误,导致在读取R时出现问题。

一个更好理解的小例子,数据集如下:

onSubmit() {
    ...
    // After successful deletion
    this.person = this.person.filter(person => person.id !== this.personInd.id);
    ...
}  

7 8 9部分应放在一行中,但错误地分成两部分(在原始数据中)。是否有机会在阅读时纠正此错误,而不是通过手动更改此错误?由于数据集大约有4m个观测值,因此手动校正将花费大量时间...

2 个答案:

答案 0 :(得分:3)

尝试以下示例:

# read the file line by line:
x <- readLines("data.txt")

# Split by " " (or in your case "\t"), and convert to dataframe with 3 columns:
res <- data.frame(matrix(unlist(strsplit(x[-1], " "), recursive = TRUE),
                         ncol = 3, byrow = TRUE))

# Add column names to dataframe:
colnames(res) <- unlist(strsplit(x[1], " "))

res
#   Col1 Col2 Col3
# 1    1    2    3
# 2    4    5    6
# 3    7    8    9
# 4   10   11   12

示例 data.txt 文件:

Col1 Col2 Col3
1 2 3
4 5 6
7
8 9
10 11 12

注意:刚注意到您的实际数据为400万行,也许这不是最有效的方法。

答案 1 :(得分:0)

我的解决方案比user zx8754的解决方案要复杂得多,但是就可以了。

readWrong <- function(file, skip = 1){
  txt <- readLines(file)
  header <- txt[seq_len(skip)]
  header <- scan(what = character(), textConnection(header))
  txt <- txt[-seq_len(skip)]
  data <- scan(textConnection(txt))
  data <- matrix(data, ncol = length(header), byrow = TRUE)
  data <- as.data.frame(data)
  names(data) <- header
  data
}


readWrong("data.txt")
#  Col1 Col2 Col3
#1    1    2    3
#2    4    5    6
#3    7    8    9
#4   10   11   12