这似乎是最容易做的事情 - 我真的尝试过我发现的所有内容,但对我来说没有任何效果。
我有一个非常简单的分数向量,如下所示:
x = c(1/2,5/2,7/2)
我想将此向量中的值转换为小数。
我尝试了this question中找到的内容,但它将我的分数转换为像c(1,3,4)
一样舍入的简单数字
我也尝试了一些库和相同的结果......
我应该提到的一件事是我的矢量是一个因素,但如果我将它转换为数字或整数,它会将值转换为舍入数字!
编辑1:
我不确定我的特定载体有什么不同。当我运行示例向量时,我在问题中一切正常。它实际上是自动评估它。我从csv文件中获取了矢量,但它看起来不像是一个字符向量,因为打印时分数不在引号中。
编辑2:
似乎csv将列视为日期,但是当我尝试在csv中手动将其转换为数字形式时,它并不真正转换为分数的结果。
编辑3:
似乎我提供的示例并不完全代表我的原始数据。如果您想尝试一些真实数据样本,可以下载csv here。另外,我的数据输入:
structure(c(14L, 13L, 4L, 5L, 8L, 7L, 3L, 8L, 11L, 1L), .Label = c("10/1",
"12/1", "15/1", "2/1", "3/1", "4/1", "5/1", "5/2", "6/1", "7/1",
"7/2", "8/1", "8/5", "9/2"), class = "factor")
答案 0 :(得分:2)
x = c(1/2,5/2,7/2)
frac <- factor(x)
as.numeric(levels(frac))[frac]
也适用于x = c("1/2","5/2","7/2")
另一个问题是您的标签与值不同 您想要将标签转换为十进制值。然后使用
frac <- structure(c(14L, 13L, 4L, 5L, 8L, 7L, 3L, 8L, 11L, 1L), .Label = c("10/1", "12/1", "15/1", "2/1", "3/1", "4/1", "5/1", "5/2", "6/1", "7/1", "7/2", "8/1", "8/5", "9/2"), class = "factor")
labl =attributes(frac)[1]
sapply(as.character(unlist(labl)), function(x) eval(parse(text=x)))