上的列操作我在稱爲Ratio
我的數據幀df
一列,其包括兩個正整數x
和y
通過/
分離的[即,格式化是x/y
]。我想通過integer((x/y)*10)
(四捨五入至最近的整數),以取代在每行中該列R:數據幀
實施例中,如果一個元素在Ratio
該值是14/20
我需要將其變更爲7
。
[有在Ratio
列的水平0/0
在這種情況下,我想它改爲5
]
上的列操作我在稱爲Ratio
我的數據幀df
一列,其包括兩個正整數x
和y
通過/
分離的[即,格式化是x/y
]。我想通過integer((x/y)*10)
(四捨五入至最近的整數),以取代在每行中該列R:數據幀
實施例中,如果一個元素在Ratio
該值是14/20
我需要將其變更爲7
。
[有在Ratio
列的水平0/0
在這種情況下,我想它改爲5
]
這裏有一個辦法:
# 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
嘿,這個也不錯。其實我更喜歡這個,因爲它將我突然需要的數字分開。 – moonshinebutter 2014-10-29 19:09:21
您是否嘗試過使用as.integer
?
> as.integer(14.001/20.01*10)
[1] 7
什麼'as.integer'與這裏的任何東西有關? 「14/20 * 10」給你帶來了什麼?我也懷疑他在'Ratio'列中有'14/20',否則R會將它轉移到'0.7' – 2014-10-28 12:03:12
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
在我的回答中,我想你的Ratio列是字符(如「14/20」) – Cath 2014-10-28 12:07:33
我修改了我的答案是首先將比率放入一個字符變量 – Cath 2014-10-28 12:15:33
而且這很完美。所以'as.character'可以改變關卡。啊。 – moonshinebutter 2014-10-28 12:31:35
什麼是'類(DF $比例)'?你能提供一個可重複的例子嗎? – 2014-10-28 11:59:56
您還沒有指定您嘗試過的方式以及卡住的位置 – Henrik 2014-10-28 12:03:09
[R eval表達式]的可能重複(http://stackoverflow.com/questions/1743698/r-eval-expression) – Henrik 2014-10-28 12:07:48