我对某些包含制表符分隔数据的数据集有一点问题,但是不幸的是原始数据中存在一些错误,导致在读取R时出现问题。
一个更好理解的小例子,数据集如下:
onSubmit() {
...
// After successful deletion
this.person = this.person.filter(person => person.id !== this.personInd.id);
...
}
7 8 9部分应放在一行中,但错误地分成两部分(在原始数据中)。是否有机会在阅读时纠正此错误,而不是通过手动更改此错误?由于数据集大约有4m个观测值,因此手动校正将花费大量时间...
答案 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