如果数据是千位用点分隔,如何使用read.table

时间:2013-10-22 13:46:31

标签: r

我想从一个点为千位分隔符的csv文件中读取。表。

结果数字应为数字。

这有点复杂,因为read.table允许配置十进制符号和引号而不是千位分隔符。

命令gsub(input[10,10],pattern='[.]',replacement='')可以删除点,但将所有内容转换为字符。与as.numeric的对话确实适用于单个数字:

> input[4,4]
[1] 1.742
97 Levels: 0 1.034 1.132 1.137 1.153 1.164 1.178 1.190 1.208 1.251 1.282 ... 950
> gsub(input[4,4],pattern='[.]',replacement='')
[1] "1742"
> as.numeric(gsub(input[4,4],pattern='[.]',replacement=''))
[1] 1742

但不适用于表格,因为gsub(input,pattern='[.]',replacement='')会产生

… [4] "c(17, 21, 31, 38, 39, 48, 56, 52, 57, 63, 66, 68, 71, 76, 78, 79, 75, 77, 74, 73, 65, 64, 55, 50, 45, 43, 34, 36, 44, 42, 32, 5, 96, 10, 9, 6, 22, 53, 54, 14, 15, 16, 24, 18, 23, 33, 25, 28, 35, 47, 49, 51, 62, 70, 72, 69, 67, 58, 26, 94, 93, 97, 8, 41, 37, 46, 29, 40, 27, 30, 20, 19, 12, 13, 11, 7, 3, 4, 2, 95, 92, 90, 89, 87, 86, 83, 81, 80, 61, 60, 59, 91, 82, 88, 84, 85, 1, 1, 1, 1)" …

如果转换为数字,则为NA的向量。此外,由于大多数值大于千位,因此该命令似乎还有其他错误。

除了编辑原始的.csv文件外,还有什么其他方法可用吗?

2 个答案:

答案 0 :(得分:1)

您可以使用与here相同的答案,只需将逗号(,)更改为\\.来电中的转义期(gsub)即可删除期间

答案 1 :(得分:0)

假设输入的类型字符开头,这应该有效 -

library(data.table)

dt <- data.table(dt)
dt[,input := as.numeric(gsub(input,pattern='[.]',replacement='')), by = 'input']