如何只将一些正数转换为负数(条件重新编码)?

时间:2012-08-17 14:34:23

标签: r variables data-management

我正在寻找一种方便的方法将正值(比例)转换为同一变量的负值,具体取决于另一个变量的值。

这就是数据结构的样子:

id Item Var1  Freq 
1  P1   0    0.043
2  P2   1    0.078
3  P3   2    0.454
4  P4   3    0.543
5  T1   0    0.001
6  T2   1    0
7  T3   2    0.045
8  T4   3    0.321
9  A1   0    0.671
...

更确切地说,如果Var1 <= 1(例如-0.043),我想将Freq的数字设为负数。

这就是我的尝试:

for(i in 1: 180) {
if (mydata$Var1 <= "1") (mydata$Freq*(-1))}

OR

mydata$Freq[mydata$Var1 <= "1"] = -abs(mydata$Freq)}

在这两种情况下,负号都设置正确,但数字也会改变。

非常感谢任何帮助。谢谢!

3 个答案:

答案 0 :(得分:4)

new.Freq <- with(mydata, ifelse(Var1 <= 1, -Freq, Freq))

答案 1 :(得分:3)

尝试:

index <- mydata$Var1 <= 1
mydata$Freq[index] = -abs(mydata$Freq[index])

您尝试的代码中有两个错误:

  • 您通过撰写x <= "1"进行了字符比较 - 这应该是数字比较,即x <= 1
  • 虽然您要替换矢量的子集,但不会引用与替换
  • 相同的子集

答案 2 :(得分:0)

当一个变量具有负值并希望通过保留负值来组合时,它也可用于处理两个变量, 类似地可以使用它来通过put-at变量的开始(如上所述)转换为负值,例如-freq。

mydata$new_Freq <- with(mydata, ifelse(Var1 < 0, Low_Freq, Freq))


id Item Var1  Freq  Low_Freq
1  P1   0    1.043  -0.063
2  P2   1    1.078  -0.077 
3  P3   2    2.401  -0.068  
4  P4   3    3.543  -0.323
5  T1   0    1.001   1.333
6  T2   1    1.778   1.887 
7  T3   2    2.045   1.011
8  T4   3    3.321   1.000
9  A1   0    4.671   2.303



# Output would be:

id Item Var1  Freq  Low_Freq   new_Freq
1  P1   0    1.043  -0.063     -0.063
2  P2   1    1.078  -0.077     -0.077
3  P3   2    2.401  -0.068     -0.068
4  P4   3    3.543  -0.323     -0.323
5  T1   0    1.001   0.999      1.001
6  T2   1    1.778   0.887      1.778
7  T3   2    2.045   1.011      2.045
8  T4   3    3.321   1.000      3.321
9  A1   0    4.671   2.303      4.671