R 如何读取csv,但仅在前两个逗号分隔符处分隔?
我有一个CSV文件。我想读取R中的文件,但只使用前2个逗号,即如果文件中有这样一行 11000,我受够了 在R中,我希望这是一个包含三列的数据帧行,如下所示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计数注释
> 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