Как перекодировать множественные условия в -1 / 0 / + 1? - PullRequest
0 голосов
/ 21 ноября 2018

У меня есть такие данные, как:

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

Я хочу заменить все положительные значения на -1, все отрицательные значения на +1, но оставить 0 на 0, как мне этого добиться?

Ответы [ 2 ]

0 голосов
/ 21 ноября 2018

Ни в коем случае это не так хорошо, как проголосовавший верх, но вот альтернатива:

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
0 голосов
/ 21 ноября 2018

Мы могли бы использовать 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

знак возвращает вектор со знаками соответствующих элементов 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")
...