我有一个 .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”内置于数据中 :) 引用 = 字符,而不是引用 = 数字。
我希望有更好的方法,但一个选择是使用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 - 如何替换数据框中变量字符串的部分
显然,只有当您因其他原因不需要在其他地方使用引号时,此方法才对您有用。
| 归档时间: |
|
| 查看次数: |
2508 次 |
| 最近记录: |