R:使用 read.csv() 尊重数字周围的引号(视为字符)?

Hen*_*ndy 5 csv formatting r

我有一个 .csv 文件,其中包含 00xxxxx 形式的帐户代码,我需要它们保持这种状态,以便与使用此格式帐户代码的其他程序一起使用。我只是在编写 R 脚本来协调周五的帐户费用,并发誓as.is = T对我有用。现在,它似乎不是。以下是一些示例数据:

test <- data.frame(col1 = c("apple", "banana", "carrot"),
                   col2 = c(100, 200, 300),
                   col3 = c("00234", "00345", "00456"))
Run Code Online (Sandbox Code Playgroud)

我的write.table策略:

write.table(test, file = "C:/path/test.csv", quote = T,
            sep=",", row.names = F)
Run Code Online (Sandbox Code Playgroud)

删除旧的data.frame并重新阅读:

rm(test)
test <- read.csv("C:/path/test.csv")
test

    col1 col2 col3
1  apple  100  234
2 banana  200  345
3 carrot  300  456
Run Code Online (Sandbox Code Playgroud)

如果不清楚,它应该看起来像data.frame我们创建的原始文件:

test
    col1 col2  col3
1  apple  100 00234
2 banana  200 00345
3 carrot  300 00456
Run Code Online (Sandbox Code Playgroud)

在仔细阅读可用read.table选项后,我还尝试了以下操作,结果与上述相同:

test <- read.csv("C:/path/test.csv", quote = '"')
test <- read.csv("C:/path/test.csv", as.is = T)
test <- read.csv("C:/path/test.csv", as.is = T, quote = '"')
Run Code Online (Sandbox Code Playgroud)

StringsAsFactors在这种情况下似乎并不相关(听起来as.is会做同样的事情。

当我在 Emacs 中打开文件时col3,确实被引号包围,所以我希望它被视为文本而不是转换为数字:

截图

大多数其他问题只是关于不处理因素之类的东西,或者让数字被识别为字符,通常是该列中被忽略的字符串的结果。

我看我可以追求的colClasses从这样的问题争论这个,但我倒是不喜欢; 我的“colClasses”内置于数据中 :) 引用 = 字符,而不是引用 = 数字。

pin*_*ing 2

我希望有更好的方法,但一个选择是使用quote=""

test <- read.csv("C:/path/test.csv", as.is = TRUE, quote = "") 
Run Code Online (Sandbox Code Playgroud)

这将使引号成为值的一部分,为您提供:

test
#col1 col2  col3
#1  apple  100 "00234"
#2 banana  200 "00345"
#3 carrot  300 "00456"
Run Code Online (Sandbox Code Playgroud)

然后,您可以将它们保留为该格式,或者使用 gsub 之类的东西来删除它们:

test$col3 <- gsub('"', '', test$col3)

test
#col1 col2  col3
#1  apple  100 00234
#2 banana  200 00345
#3 carrot  300 00456
Run Code Online (Sandbox Code Playgroud)

您可以使用某种 apply-type 函数一次性对整个数据框执行 gsub:

test <- as.data.frame(sapply(test,gsub,pattern='"',replacement=""))
Run Code Online (Sandbox Code Playgroud)

sapply 代码取自:R - 如何替换数据框中变量字符串的部分

显然,只有当您因其他原因不需要在其他地方使用引号时,此方法才对您有用。