проверьте, имеет ли каждая строка в двух столбцах один и тот же знак - PullRequest
1 голос
/ 01 марта 2020

Извините, что я не указал: V1 и V2 - значения факторов. Когда я

sign(as.numeric(df$V1)) == sign(as.numeric(df$V2))

Каждый случай возвращает true.


Проверьте, имеет ли каждая строка в двух столбцах один и тот же знак. Вернуть false, если один равен 0, но true, если оба равны; Пример таков:

V1  V2
-1  2.3
3.6 2
-2  -4
0   4
0   0

V1  V2   comparison
-1  2.3    false
3.6 2      true
-2  -4     true
0   4      false
0   0      true

Я пришел с этим, который всегда возвращает истину:

output.df$comparison = (((as.numeric(output.df$V1) > 0) & (as.numeric(output.df$V2) > 0)) | ((as.numeric(output.df$V1) < 0) & (as.numeric(output.df$V2) < 0)))

Ответы [ 3 ]

2 голосов
/ 01 марта 2020

Вы можете сравнить их sign, который также будет обрабатывать регистр для 0.

df$comparison <- sign(df$V1) == sign(df$V2)
df

#    V1   V2 comparison
#1 -1.0  2.3      FALSE
#2  3.6  2.0       TRUE
#3 -2.0 -4.0       TRUE
#4  0.0  4.0      FALSE
#5  0.0  0.0       TRUE

данные

df <- structure(list(V1 = c(-1, 3.6, -2, 0, 0), V2 = c(2.3, 2, -4, 
4, 0)), class = "data.frame", row.names = c(NA, -5L))
0 голосов
/ 01 марта 2020

способ dplyr:

df <- df %>% mutate(ifelse(sign(V1)==sign(V2),TRUE,FALSE)
0 голосов
/ 01 марта 2020

Другая base R идея может быть:

apply(df, 1, function(x) sd(sign(x))) == 0

[1] FALSE  TRUE  TRUE FALSE  TRUE
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...