2015-10-04 40 views
0

我有整数型的变量中,并具有值1/1整数值给出不同的值

> typeof(res[3,"V2.review/helpfulness"]) 
[1] "integer" 
> res[3,"V2.review/helpfulness"] 
[1] 1/1 

现在,当我存储或将其转换为整数我想值作为1分割1这是1 例如,如果我有2/3我想要的值0.6666 但它给我的结果作为

> as.integer(res[3,"V2.review/helpfulness"]) 
[1] 6 
> as.double(res[3,"V2.review/helpfulness"]) 
[1] 6 

某人能否提供一个解决方案吗?

+0

你可以显示你的一些数据吗?您可以将'dput(head(res))'的输出复制粘贴到您的问题中。 – Heroka

+0

这是一个非常大的数据 –

+0

@Heroka你能明确你到底想知道什么 –

回答

1

不,你正在寻找一个因素,而不是一个整数:

DF = data.frame(x = c("1/1","2/3")) 
typeof(DF$x) # "integer" 
class(DF$x) # "factor" 

了解存储型(typeof)是很少重要。我建议阅读R语言定义的前几个部分,以加快R的课程和其他与您以前可能使用的语言区分的怪癖。要达到此目的,请键入help.start()并单击“R语言定义”。


从文件读取,R将字符串转换为因子,这些因子是分类变量。它不评估你在那里的算术表达式(1/12/3),也没有任何分数的类,只有整数,复数和浮点数。

如果你想存储你的分数精确,单独存放的分子和分母:

library(data.table) 
DF[,c("num","den")] <- tstrsplit(as.character(DF$x), "/", type.convert = TRUE) 

DF 
#  x num den 
# 1 1/1 1 1 
# 2 2/3 2 3 

到现在评估分数,你可以使用

DF$xnum <- DF$num/DF$den # obviously not an integer 

DF 
#  x num den  xnum 
# 1 1/1 1 1 1.0000000 
# 2 2/3 2 3 0.6666667 

要查看的所有类列,使用

sapply(DF, class) 
#   x  num  den  xnum 
# "factor" "integer" "integer" "numeric" 

评估分数的捷径是DF$xnum <- sapply(as.character(DF$x), function(z) eval(parse(text=z))),但这种攻击通常是强烈的不鼓励。