嗨,所有社区, 我有以下数据库:
ID Distance
M1_PRM 54,56
M1_PRM 4147,69
M1_PRM 1723,34
我使用以下脚本替换“。”中的“,”。在距离中,因为R不喜欢“,”(并且它有效):
mysub<-function(x)(sub(",",".",x))
DB<-(apply(DB, 2,mysub))
DB<-data.frame(DB)
然后我需要转换DB $ Distance as.numeric
因为我需要使用
tapply
与sum一起使用,例如:
apply(DB$Distance,ID,sum)
当我给出
DB$Distance<-as.numeric(DB$Distance)
ID Distance
M1_PRM 54
M1_PRM 4147
M1_PRM 1723
似乎R丢弃小数! 有人知道出了什么问题吗? 提前谢谢!
答案 0 :(得分:5)
另一种方法(如果您从文件中读取此内容):
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
答案 1 :(得分:3)
@joran的答案是要走的路,如果你用DB
或read.table
阅读read.csv
,否则,type.convert
需要dec
1}}选项。
type.convert(as.character(DB$Distance), dec = ",")
# [1] 54.56 4147.69 1723.34
如果as.character
已经存在,请放弃Distance
。
答案 2 :(得分:1)
R正在丢弃十进制,因为您在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
然后使用tapply
,如下所示:
with(DB, tapply(Distance, ID, sum))
您的apply(DB$Distance,ID,sum)
将无效,而是使用tapply(DB$Distance, DB$ID, sum)
,因为正确的函数是tapply
,您必须提供数字检查器和索引,它们都附加在{{{除非您使用DB
函数或ID
,否则R将找不到with(.)
。
请参阅DB$ID
和?apply
。
我只是想根据你的帖子给你答案。 @joran的回答是如果您从文件导入数据的直接方式,如果是这样,您的所有问题都会在?tapply
调用中减少使用dec = ","