如何读取R中的csv文件,其中某些值包含百分号(%)

Bry*_*n P 4 csv r

是否有一种干净/自动的方式来转换%在R 中用百分比(带尾随符号)格式化的CSV值?

以下是一些示例数据:

actual,simulated,percent error
2.1496,8.6066,-300%
0.9170,8.0266,-775%
7.9406,0.2152,97%
4.9637,3.5237,29%
Run Code Online (Sandbox Code Playgroud)

哪个可以使用:

junk = read.csv("Example.csv")
Run Code Online (Sandbox Code Playgroud)

但是所有%列都被读取为字符串并转换为因子:

> str(junk)
 'data.frame':  4 obs. of  3 variables:
 $ actual       : num  2.15 0.917 7.941 4.964
 $ simulated    : num  8.607 8.027 0.215 3.524
 $ percent.error: Factor w/ 4 levels "-300%","-775%",..: 1 2 4 3
Run Code Online (Sandbox Code Playgroud)

但我希望它们是数值.

read.csv还有一个附加参数吗?有没有办法轻松过帐所需的列以转换为数值?其他方案?

注意:当然在这个例子中我可以简单地重新计算值,但是在我的实际应用程序中使用更大的数据文件这是不实际的.

Rol*_*and 11

R中没有"百分比"类型.所以你需要做一些后期处理:

DF <- read.table(text="actual,simulated,percent error
2.1496,8.6066,-300%
0.9170,8.0266,-775%
7.9406,0.2152,97%
4.9637,3.5237,29%", sep=",", header=TRUE)

DF[,3] <- as.numeric(gsub("%", "",DF[,3]))/100

#  actual simulated percent.error
#1 2.1496    8.6066         -3.00
#2 0.9170    8.0266         -7.75
#3 7.9406    0.2152          0.97
#4 4.9637    3.5237          0.29
Run Code Online (Sandbox Code Playgroud)

  • 出于性能原因,我建议`as.numeric(sub("%","",DF [[3]],fixed = TRUE))`(`sub`用于搜索只有一个事件,`fixed = TRUE`来搜索对于不是正则表达式的精确模式,`DF [[3]]`比`DF [,3]`更有效. (2认同)