2014-10-28 201 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