gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 12:44:01 27 4
gpt4 key购买 nike

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

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com