2

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

这是数据结构的样子:

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))}

或者

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

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

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

4

3 回答 3

4
new.Freq <- with(mydata, ifelse(Var1 <= 1, -Freq, Freq))
于 2012-08-17T14:40:32.750 回答
3

尝试:

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

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

  • 您通过写作进行了字符比较x <= "1"- 这应该是数字比较,即x <= 1
  • 尽管您要替换向量的一个子集,但您不会引用与替换相同的子集
于 2012-08-17T14:40:57.227 回答
0

它也可以用于处理两个变量,当一个变量具有负值并希望通过保留负值来组合它时,同样可以使用它在变量的开头放置 - 将其转换为负值(如上所述),例如 -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
于 2018-05-24T13:28:15.533 回答