r - 使用Apply获取数值

标签 r math loops error-handling apply

我有两列数据,例如:

col1: c(1,2,3,0,7)
col2: c(4,5,6,7,3)

对于每个列,我想计算该比率并将其作为列的最后一个值:
 No. of values less than 5/(No. of values greater than 5 + No. of values lesser than 5)

因此,第一列的结果应为4/4 + 1 = 0.2

我是R的新手,我想到上述方法的唯一方法是遍历整个列并使用if-else结构。有没有更好的办法?

这是我不想使用的,因为它太笨拙了:
for (a in 1:5)
{
if(col1<5){v1++;}
if(col1>5){v2++;}
}
v3<-v1/(v1+v2);
col1[6]<-v3;

当我做以上时,我得到错误:
Error in if (col1[a] < 5) { : missing value where TRUE/FALSE needed

我确保该列中的所有数字都是数字,那么为什么会出现此错误?

最佳答案

你的数学不对了。

DF <- data.frame(col1=c(1,2,3,0,7), col2=c(4,5,6,7,3))

result <- apply(DF,2,function(x) sum(x<5)/(sum(x!=5)))
result
#col1 col2 
# 0.8  0.5 

关于r - 使用Apply获取数值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17149120/

相关文章:

r - 将数据分区创建为训练、测试和验证 - 在 R 中拆分

html - 底部对齐 R shiny 中的按钮

java - 为什么我的 Java while 循环不停止并让我的程序终止?

r - knitr:无法创建带有 utf-8 字符的图形

r - 在 Ubuntu 上使用 openmpi 3.0.0 加载 Rmpi​​ 抛出错误

algorithm - 如何使用算术运算用给定的数字表示数字?

javascript - 根据高度计算纵横比宽度

math - 具有无穷大和 nan 的复数乘法/除法

angular - Angular2+ ngFor 指令如何迭代 ref 可迭代对象?

Java:在两个ArrayList中查找匹配对象值的最有效方法?