Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如果数据以点分隔,如何使用read.table_R - Fatal编程技术网

如果数据以点分隔,如何使用read.table

如果数据以点分隔,如何使用read.table,r,R,我想从一个csv文件中读取.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.1

我想从一个csv文件中读取.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(输入,模式='[.]',替换=''')

…
[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
文件之外,还有其他有用的东西吗?

假设输入是字符类型,这应该可以工作-

library(data.table)

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

dt您可以使用与相同的答案,只需在
gsub
调用中将coma(
)更改为转义周期(
\.
),即可删除周期。

使用
quote=“\”"
作为
read.csv
帮助中的一个参数,即如果文件中引用了数字,那么千位分隔符包含在引号中,应该可以解决问题。如果没有帮助,请向我们展示一些示例输入数据。我会将其作为.numeric
gsub
使用
apply
进行技巧转换无法工作,因为您的数据已转换为因子。请尝试将
stringsAsFactors=FALSE
添加到
read.table()
-1因为没有提供示例数据。我不太明白为什么这里需要一个
by=input
。如果不使用by运行它,它将在输入列中一起gsub,而不是一行一行地执行。by
有助于确保只将一个值传递给gsub,而不是整个向量。对不起,您可以提供一个示例吗?Already OP没有。我似乎很难在这个问题上绞尽脑汁……
gsub
是矢量化的,
input
是矢量。所以,我真的不明白仅仅这样做有什么问题:
dt[,input:=as.numeric(gsub(\\\,“”,as.character(input))]
library(data.table)dt