我有一个 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/