我有两个基本问题,R代码作为标题。
假设我有一个数据集,如:
w <- c( 0.005810275, -0.002758455, -0.005423105, -0.006692736, -0.010571356,
-0.006818535, -0.006943209, -0.004355057, -0.005951043, -0.002172708,
-0.003631478, -0.003957327, -0.005285497, -0.007682379, -0.007746185,
-0.011307843, -0.014013202, -0.013537595, -0.012859406, -0.013629170)
我尝试将它们分成4组,因此编写如下代码:
n=20
group <- rep(0,n)
for (i in 1:n){
if (W[i] <= -0.05) { group[i]=1}
else if ( -0.05 < W[i] <= -0.03 ) {group[i]=2}
else if (-0.03 < W[i] <= -0.01) {group[i]=3}
else group[i]=4
}
错误消息如下:
> group <- rep(0,n)
> for (i in 1:n){
+ if (W[i] <= -0.05) { group[i]=1}
+ else if ( -0.05 < W[i] <= -0.03 ) {group[i]=2}
Error: unexpected '<=' in:
" if (W[i] <= -0.05) { group[i]=1}
else if ( -0.05 < W[i] <="
> else if (-0.03 < W[i] <= -0.01) {group[i]=3}
Error: unexpected 'else' in " else"
> else group[i]=4
Error: unexpected 'else' in " else"
> }
Error: unexpected '}' in "}"
我真的不知道为什么&#34;&lt; =&#34;是一个错误。
有人可以提供帮助吗?非常感谢!顺便说一句,我使用RStudio。
答案 0 :(得分:4)
使用基础cut
功能:
cut(w,breaks = c(-2,-0.05,-0.03,-0.01,2),labels = c(1,2,3,4),right = TRUE)
如果&#39>你可以使用right = TRUE或FALSE。如果间隔应该在右边关闭&#39;或不。 数据:
w <- c( 0.005810275, -0.002758455, -0.005423105, -0.006692736, -0.010571356,
-0.006818535, -0.006943209, -0.004355057, -0.005951043, -0.002172708,
-0.003631478, -0.003957327, -0.005285497, -0.007682379, -0.007746185,
-0.011307843, -0.014013202, -0.013537595, -0.012859406, -0.013629170)
答案 1 :(得分:2)
我们可以使用findInterval
findInterval(w, c(-2, -0.05, -0.03, -0.01, 2))
#[1] 4 4 4 4 3 4 4 4 4 4 4 4 4 4 4 3 3 3 3 3
答案 2 :(得分:0)
cut
是要走的路。但是你的代码不起作用,因为R不明白这一点:
-0.05 < W[i] <= -0.03
以下是根据两个条件检查值的正确方法示例:
x = 5
x < 10
[1] TRUE
x > 1
[1] TRUE
1 < x < 10
Error: unexpected '<' in "1 < x <"
x > 1 & x < 10
[1] TRUE
答案 3 :(得分:0)
这应该适用于您的RStudio:
W <- c( 0.005810275, -0.002758455, -0.005423105, -0.006692736, -0.010571356,
-0.006818535, -0.006943209, -0.004355057, -0.005951043, -0.002172708,
-0.003631478, -0.003957327, -0.005285497, -0.007682379, -0.007746185,
-0.011307843, -0.014013202, -0.013537595, -0.012859406, -0.013629170)
n=20
group <- rep(0,n)
for (i in 1:n){
if (W[i] < -0.05) {
group[i]=1} else {
if (W[i]>= -0.05 & W[i]< -0.03) {
group[i]=2} else {
if (W[i]>= -0.03 & W[i]< -0.01) {
group[i]=3} else {group[i]=4}
}
}
}
请注意,R与SAS不同。您不能在同一个赋值语句中使用两个运算符。例如,“1&lt; = x&lt; 8”在R中不起作用。您必须将其更改为逻辑语句:“x&gt; = 1&amp; x&lt; 8”将起作用。