r-如何将多个条件重新编码为-1/0/+1



我有我的数据,比如:

Name A B C
apple 1 -1 0
banana 2 -2 1
pear -3 0 1

我想将所有正值替换为-1,将所有负值替换为+1,但保持0为0,我如何实现这一点?

我们可以使用sign来获得数据帧中所有元素的符号,然后通过将其乘以-1来反转它。

df[-1] <- sign(df[-1]) * -1
df
#    Name  A B  C
#1  apple -1 1  0
#2 banana -1 1 -1
#3   pear  1 0 -1

来自?sign

sign返回一个向量,该向量具有x的相应元素的符号(如果实数分别为正、零或负,则实数的符号为1、0或-1(。

数据

df <- structure(list(Name = structure(1:3, .Label = c("apple", "banana", 
"pear"), class = "factor"), A = c(-1, -1, 1), B = c(1, 1, 0), 
C = c(0, -1, -1)), .Names = c("Name", "A", "B", "C"), row.names = c(NA, 
-3L), class = "data.frame")

这绝不像投票最多的人那么好,但这里有一个替代方案:

ans <- df1[,-1] / -abs(df1[,-1])
ans[sapply(ans,is.nan)] <- 0
#> ans
#   A B  C
#1 -1 1  0
#2 -1 1 -1
#3  1 0 -1

最新更新