当应用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