在R中读取csv文件。

5

我想在R中读取一个.csv文件。我的文件看起来像这样-

A,B,C,D,E

1,2,3,4,5

6,7,8,9,10

.

.

.

行数。

所有都是字符串。第一行是标题。

我正在尝试使用以下方式读取文件 -

mydata=read.csv("devices.csv",sep=",",header = TRUE)

但是我的数据被分配为1个变量的X行观测值。其中X是行数。整行变成了单列。 但我想要每个标题字段都在不同的列中。我无法理解问题所在。


检查您的CSV文件是否有丢失逗号,尤其是包含列名的行。 - JakeC
1
你能否尝试使用以下代码:read.table(text=gsub('"', '', readLines('devices.csv')), sep=",", header=TRUE) - akrun
它没有这样做。我不知道为什么会这样。我已经阅读了许多其他答案,但没有一个有效。 - maggs
@akrun 我试过了,但到目前为止它对我没有起作用。 - maggs
是的,gsub 正常工作。 - maggs
2个回答

10
如果有引号("),可以使用OP帖子中的代码。
str(read.csv("devices.csv",sep=",",header = TRUE))
#'data.frame':  2 obs. of  1 variable:
#$ A.B.C.D.E: Factor w/ 2 levels "1,2,3,4,5","6,7,8,9,10": 1 2

在使用readLines读取数据后,我们可以使用gsub删除",然后使用read.table进行处理。

read.csv(text=gsub('"', '', readLines('devices.csv')), sep=",", header=TRUE)
#  A B C D  E
#1 1 2 3 4  5
#2 6 7 8 9 10

如果我们使用的是Linux,另一个选择就是使用awk去除引号,并通过read.csv进行管道传输。
  read.csv(pipe("awk  'gsub(/\"/,\"\",$1)' devices.csv")) 
  #  A B C D  E
  #1 1 2 3 4  5
  #2 6 7 8 9 10

或者

 library(data.table)
 fread("awk  'gsub(/\"/,\"\",$1)' devices.csv") 
 #   A B C D  E
 #1: 1 2 3 4  5
 #2: 6 7 8 9 10

数据

v1 <- c("A,B,C,D,E", "1,2,3,4,5", "6,7,8,9,10")
write.table(v1, file='devices.csv', row.names=FALSE, col.names=FALSE)

1
你编写的代码应该能够正常工作,除非你的csv文件损坏了。
检查是否给出了devices.csv的绝对路径

测试方法: data[1] 将给出第一列的结果

或者,你也可以尝试这种方式

data = read.table(text=gsub('"', '', readLines('//fullpath to devices.csv//')), sep=",", header=TRUE) 

好运!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接