if-else,并在r中划分类别
如果数字大于0,我试图将一列数字分成6个相等的类别 这是我尝试过的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
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