我的csv文件如下所示(如果在Excel中打开):
1 "A long string describing following data"
2 id name sex
3 14 Jeff M
4 17 Mary F
...
1430 "Another long string describing following data"
1431 4729 John M
1432 5870 Tina F
...
我希望将这些数据读入R而不用那些描述行(有很多这样的行,我不能手动完成),我该怎么做?
我试过read.csv
,但它说:
Error in read.table(file = file, header = header, sep = sep, quote = quote, :
more columns than column names
答案 0 :(得分:3)
一种选择是使用count.fields
只读取包含4个项目的那些行,或者排除那些具有指定数量项目的行,例如,
# make a temporary test file
text <- '1 "A long name describing following data"
2 id name sex
3 14 Jeff M
4 17 Mary F
1430 "Another long name"
1431 4729 John M
1432 5870 Tina F'
temp.path <- tempfile()
write(text, temp.path)
# read data
read.table(text=readLines(temp.path)[count.fields(temp.path) == 4], header=TRUE)
# X2 id name sex
# 1 3 14 Jeff M
# 2 4 17 Mary F
# 3 1431 4729 John M
# 4 1432 5870 Tina F
# remove tempfile
unlink(temp.path)
答案 1 :(得分:1)
要详细说明我的评论(但未以list
身份阅读),请将文件另存为CSV。我假设第一组数字实际上只是某种形式的行号,而不是实际数据的一部分。
x <- tempfile() ## We'll pretend this is your actual CSV file
cat("A long name describing following data",
"id name sex",
"14 Jeff M",
"17 Mary F",
"Another long name describing following data",
"4729 John M",
"5870 Tina F", sep = "\n", file = x)
您可以使用[a-zA-Z]
搜索以字符类grep
开头的所有行。 grep
可以选择反转结果并显示值而不是位置。这两个对read.table
:
read.table(text = grep("^[a-zA-Z]", readLines(x),
value = TRUE, invert = TRUE),
header = FALSE)
# V1 V2 V3
# 1 14 Jeff M
# 2 17 Mary F
# 3 4729 John M
# 4 5870 Tina F
以后可以轻松添加names
列。