Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/30.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 如何读取csv,但仅在前两个逗号分隔符处分隔?_R_Csv - Fatal编程技术网

R 如何读取csv,但仅在前两个逗号分隔符处分隔?

R 如何读取csv,但仅在前两个逗号分隔符处分隔?,r,csv,R,Csv,我有一个CSV文件。我想读取R中的文件,但只使用前2个逗号,即如果文件中有这样一行 11000,我受够了 在R中,我希望这是一个包含三列的数据帧行,如下所示 > df <- data.frame("Id"="1","Count" ="1000", "Comment" = "I, am done, with you") > df Id Count Comment 1 1 1000 I, am done, with you >测向 Id计数注释

我有一个CSV文件。我想读取R中的文件,但只使用前2个逗号,即如果文件中有这样一行

11000,我受够了

在R中,我希望这是一个包含三列的数据帧行,如下所示

> df <- data.frame("Id"="1","Count" ="1000", "Comment" = "I, am done, with you")
> df
  Id Count              Comment
1  1  1000 I, am done, with you
>测向
Id计数注释
1.1.1.我跟你完了

正则表达式可以工作

例如,假设
str
是要识别的行。这里假设您的csv文件如下所示

1,1000,I, am done, with you
2,500, i don't know
     [,1]                          [,2] [,3]   [,4]                  
[1,] "1,1000,I, am done, with you" "1"  "1000" "I, am done, with you"
[2,] "2,500, i don't know"         "2"  "500"  "i don't know"        
如果要从文件中读取,只需调用
readLines()
,将文件的所有行作为R中的字符向量读取,就像
str
一样

这项技术非常简单。这里我使用
{stringr}
包匹配文本并提取所需的信息

str <- c("1,1000,I, am done, with you", "2,500, i don't know")

library(stringr)

# match the strings by pattern integer,integer,anything
matches <- str_match(str,pattern="(\\d+),(\\d+),\\s*(.+)")
瞧,
str\u match
函数成功地将文本按模式分割成矩阵。然后,我们的工作只是将矩阵转换为具有正确数据类型的数据帧

df <- data.frame(matches[,-1],stringsAsFactors=F)
colnames(df) <- c("Id","Count","Comment")
df <- transform(df,Id=as.integer(Id),Count=as.integer(Count))

我已经通过在中读取文件并合并包含3个以上元素的行来实现了这一点。我想知道是否有更优雅的解决方案。如果随信附上,您可以阅读“1”,“1000”,“我,我完成了,与您一起”。我希望有一个更直接的解决方案。我试图避免阅读后对其进行后处理。我确实使用了一种解决方法,读取整个文件,然后将每一行与3个以上的元素粘贴在一起。假设您的csv文件名为
data.csv
,您只需调用
readLines(“data.csv”)
即可将所有行作为字符向量读取到R中。然后正则表达式将接管。
  Id Count              Comment
1  1  1000 I, am done, with you
2  2  1002         i don't know