我有一个for循环检查三列中是否存在条件。我想找到一种更有效地执行此操作的方法,因为我实际上在一个非常大的数据库中运行类似于此的东西,并且循环需要几个小时。
df <- data.frame(
Binary1 = c(1,1,1,1,0,1,0,1,0,0),
Binary2 = c(0,1,0,1,1,1,0,0,1,0),
Binary3 = c(0,0,0,1,1,1,1,0,0,1))
for(j in 1:nrow(df)) {df$CompoundSignal[j] <- ifelse ( df$Binary1[j] == 1
& df$Binary2[j] == 1
& df$Binary3[j] == 1
, 1, 0)}
答案 0 :(得分:2)
您可以使用不带循环的不同方法。以下是其中一些:
as.integer(rowSums(df) == 3)
#[1] 0 0 0 1 0 1 0 0 0 0
或
pmin(df$Binary1, df$Binary2, df$Binary3)
#[1] 0 0 0 1 0 1 0 0 0 0
或
as.integer(df$Binary1 & df$Binary2 & df$Binary3)
#[1] 0 0 0 1 0 1 0 0 0 0
顺便说一下,ifelse
是矢量化的,所以你不需要在你的方法中循环。
答案 1 :(得分:0)
这有用吗?
df$CompoundSignal = as.integer(df$Binary1==1 & df$Binary2==1 & df$Binary3==1)