2014-10-28 126 views
-1

上的列操作我在称为Ratio我的数据帧df一列,其包括两个正整数xy通过/分离的[即,格式化是x/y]。我想通过integer((x/y)*10)(四舍五入至最近的整数),以取代在每行中该列R:数据帧

实施例中,如果一个元素在Ratio该值是14/20我需要将其变更为7

[有在Ratio列的水平0/0在这种情况下,我想它改为5]

+0

什么是'类(DF $比例)'?你能提供一个可重复的例子吗? – 2014-10-28 11:59:56

+1

您还没有指定您尝试过的方式以及卡住的位置 – Henrik 2014-10-28 12:03:09

+1

[R eval表达式]的可能重复(http://stackoverflow.com/questions/1743698/r-eval-expression) – Henrik 2014-10-28 12:07:48

回答

0

这里有一个办法:

# an example data frame 
> dat <- data.frame(Ratio = c("0/0", "14/20")) 

transform(dat, Ratio2 = sapply(strsplit(as.character(Ratio), "/"), function(x) 
    if (x[2] == "0") 5 else round(Reduce("/", as.integer(x)) * 10))) 
# Ratio Ratio2 
# 1 0/0  5 
# 2 14/20  7 
+0

嘿,这个也不错。其实我更喜欢这个,因为它将我突然需要的数字分开。 – moonshinebutter 2014-10-29 19:09:21

-1

您是否尝试过使用as.integer

> as.integer(14.001/20.01*10) 
[1] 7 
+1

什么'as.integer'与这里的任何东西有关? “14/20 * 10”给你带来了什么?我也怀疑他在'Ratio'列中有'14/20',否则R会将它转移到'0.7' – 2014-10-28 12:03:12

0
df$Ratio<-as.character(df$Ratio) 
df$resRatio[df$Ratio!="0/0"]<-sapply(df$Ratio[df$Ratio!="0/0"], 
            function(expr) { 
              round(eval(parse(text=expr))*10,0)}) 
df$resRatio[df$Ratio=="0/0"]<-5 
+0

在我的回答中,我想你的Ratio列是字符(如“14/20”) – Cath 2014-10-28 12:07:33

+0

我修改了我的答案是首先将比率放入一个字符变量 – Cath 2014-10-28 12:15:33

+0

而且这很完美。所以'as.character'可以改变关卡。啊。 – moonshinebutter 2014-10-28 12:31:35