我正在寻找一种方便的方法将正值(比例)转换为同一变量的负值,具体取决于另一个变量的值。
这就是数据结构的样子:
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)}
在这两种情况下,负号都设置正确,但数字也会改变。
非常感谢任何帮助。谢谢!
答案 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