R语言 检查两列中的每一行是否具有相同的符号

p8h8hvxi  于 2023-01-28  发布在  其他
关注(0)|答案(3)|浏览(199)

抱歉,我没有详细说明:V1和V2是系数值。
sign(as.numeric(df$V1)) == sign(as.numeric(df$V2))
每个case都返回true。
检查两列中的每一行是否具有相同的符号。如果一个为0,则返回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)))
t3irkdon

t3irkdon1#

您可以比较它们的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))
g52tjvyc

g52tjvyc2#

base R的另一个想法可能是:

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

[1] FALSE  TRUE  TRUE FALSE  TRUE
lf5gs5x2

lf5gs5x23#

  • dplyr* 方式:
df <- df %>% mutate(comparison = (sign(V1) == sign(V2))

相关问题