当应用as.numeric时,为什么R放弃十进制?

当应用as.numeric时,为什么R放弃十进制?,r,decimal,R,Decimal,大家好, 我有以下资料: ID Distance M1_PRM 54,56 M1_PRM 4147,69 M1_PRM 1723,34 我使用以下脚本替换距离中的“,”,因为R不喜欢“,”,并且它可以工作: 当我给 DB$Distance<-as.numeric(DB$Distance) ID Distance M1_PRM 54 M1_PRM 4147 M1_PRM 1723 DB$DistanceR正在丢弃十进制,因为您在apply调用中走错了方向,请尝试 > D

大家好, 我有以下资料:

ID Distance
M1_PRM    54,56
M1_PRM  4147,69
M1_PRM  1723,34
我使用以下脚本替换距离中的“,”,因为R不喜欢“,”,并且它可以工作:

当我给

DB$Distance<-as.numeric(DB$Distance)

ID Distance
M1_PRM 54
M1_PRM 4147
M1_PRM 1723

DB$DistanceR正在丢弃十进制,因为您在
apply
调用中走错了方向,请尝试

> DB$Distance <- as.numeric(sub(",",".",DB$Distance))
> sapply(DB, class)
       ID  Distance 
 "factor" "numeric" 
> DB
      ID Distance
1 M1_PRM    54.56
2 M1_PRM  4147.69
3 M1_PRM  1723.34
您的
apply(DB$Distance,ID,sum)
将不起作用,请改用
tapply(DB$Distance,DB$ID,sum)
,因为正确的函数是
tapply
,您必须给出一个数字verctor和一个索引,它们都附加在
DB
中,因此R不会找到
ID
,除非您将
与(.)
功能或
DB$ID

请参见
?应用
?t应用

我只是想根据你的帖子给你一个答案@joran的答案是从文件导入数据的直接方法,如果是这样,所有问题都会减少到使用
read.table中的
dec=“,”
,调用另一种方法(如果从文件中读取):

dat-dat
ID距离
1 M1_PRM 54.56
2 M1_PRM 4147.69
3 M1_PRM 1723.34

@joran的答案是正确的,如果您使用
read.table
read.csv
DB
中阅读,否则,就有
type.convert
选项

type.convert(as.character(DB$Distance), dec = ",")
# [1]   54.56 4147.69 1723.34

如果
距离
已经是这样的话,就把
作为.character
丢弃。

真的是非常有用的建议…我开始明白,有时候有一种简单的方法可以从R获得我们想要的!!!多谢大家@斯蒂法诺,很乐意帮忙。在你离开之前,别忘了接受这里的一个答案,这样这个悬而未决的问题就解决了。
> DB$Distance <- as.numeric(sub(",",".",DB$Distance))
> sapply(DB, class)
       ID  Distance 
 "factor" "numeric" 
> DB
      ID Distance
1 M1_PRM    54.56
2 M1_PRM  4147.69
3 M1_PRM  1723.34
with(DB, tapply(Distance, ID, sum))
dat <- read.table(text = "ID Distance
 M1_PRM    54,56
 M1_PRM  4147,69
 M1_PRM  1723,34",header = TRUE,sep = "",dec = ",")
> dat
      ID Distance
1 M1_PRM    54.56
2 M1_PRM  4147.69
3 M1_PRM  1723.34
type.convert(as.character(DB$Distance), dec = ",")
# [1]   54.56 4147.69 1723.34