if-else,并在r中划分类别

if-else,并在r中划分类别,r,if-statement,R,If Statement,如果数字大于0,我试图将一列数字分成6个相等的类别 这是我尝试过的 if (nost13$actsum > 0) nost13$actclass2 <- as.factor( as.numeric( cut(nost13$actsum ,6))) else 0 if(nos13$actsum>0)nos13$actclass2也许这是一个未经测试的答案。如果您首先提供数据对象,则可以提供经过测试的解决方案。关于什么是“平等类别”也存在着模糊性。相等的计数?还是等跨度?这回答了cut

如果数字大于0,我试图将一列数字分成6个相等的类别

这是我尝试过的

if (nost13$actsum > 0) nost13$actclass2 <- as.factor( as.numeric( cut(nost13$actsum ,6)))
else 0

if(nos13$actsum>0)nos13$actclass2也许这是一个未经测试的答案。如果您首先提供数据对象,则可以提供经过测试的解决方案。关于什么是“平等类别”也存在着模糊性。相等的计数?还是等跨度?这回答了
cut
将提供的相等跨度

 nost13$actclass2 <- ifelse(nost13$actsum > 0,
                                 cut(nost13$actsum ,6), 0)
因此,根据价值的分布情况,您可能没有得到您想要的东西。这表明对该策略的修改可能会更令人满意:

> vals <- -100:100
> splits <- seq(min(vals[vals>0]),max(vals[vals>0]), length=8)[-8]
> actclass2 <- ifelse(vals > 0,
+                           cut(vals ,breaks=splits ), 0)
> table(actclass2)
actclass2
  0   1   2   3   4   5   6 
101  14  14  14  14  14  14 

findInterval
的间隔在左侧关闭,而
cut
的默认值在右侧关闭。

第一个错误是使用
if
。在R中,它不会像警告消息应该告诉您的那样作用于向量。确定:-)那么该如何操作?(1)请参见
?ifelse
;(2) 如果这还不能回答你的问题,你能提供数据给我们吗?我会调查ifelse的可能副本
> vals <- -100:100
> splits <- seq(min(vals[vals>0]),max(vals[vals>0]), length=8)[-8]
> actclass2 <- ifelse(vals > 0,
+                           cut(vals ,breaks=splits ), 0)
> table(actclass2)
actclass2
  0   1   2   3   4   5   6 
101  14  14  14  14  14  14 
> table( findInterval( vals, c(-Inf, 0, splits[-1], Inf) ))

  1   2   3   4   5   6   7   8 
100  16  14  14  14  14  14  15