上的列操作我在称为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