r - 如何读取 csv 但仅在前两个逗号分隔符处分开?

标签 r csv

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

1,1000,I, am done, with you

在 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

最佳答案

正则表达式会起作用。

例如,假设 str 是您要识别的行。假设您的 csv 文件看起来像

1,1000,I, am done, with you
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*(.+)")

这里我简单解释一下模式(\\d+),(\\d+),\\s*(.+)\\d代表数字字符,\\s代表空格字符,.代表任何字符。 +表示一个或多个,*表示一个或多个。 () 对模式进行分组,以便该函数知道我们将什么视为一组信息。

如果你看匹配,它看起来像

     [,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"        

看,str_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))

df 是我们的目标:

  Id Count              Comment
1  1  1000 I, am done, with you
2  2  1002         i don't know

关于r - 如何读取 csv 但仅在前两个逗号分隔符处分开?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21821590/

相关文章:

python - 在Python中创建(空格分隔的)文本文件的列(或行)数组

java - 外键问题MySQL

python - Pandas 将 csv 列值读取为列表

r - 如何在R中使用循环和并行获得相同的结果?

r - 使用odbc/dbplyr时如何按日期+常量过滤?更新问题

r - 了解 R 中的 loess 错误

c# - 如何在 C# 中使用 post Web 请求发送 .csv 文件

python - 如何使用 python 在 csv 文件中删除 None 行?

java - Web 应用程序的交互式图表

r - R Flexdashboard 中的下载按钮宽度