簡體   English   中英

基於多個IFELSE語句匯總列

[英]Summing Up Columns Based on Multiple IFELSE Statements

我有20列要基於其他列分配布爾值。 我想為數據集中的每一行生成這些值,然后創建一列來匯總這20列中的值。 問題是,當我期望至少一些計數大於1時,我為求和列接收的唯一值為1。我的代碼如下:

for (i in 1:nrow(test)){
test$var1<-with(test[i],ifelse((varA==1 & varB>10),1,0))
test$var2<-with(test[i],ifelse((varb==1),1,0))
...
test$var20<-with(test[i],ifelse((varx==1 & varB>15),1,0))
test$count<-rowSums(,20:39])
}

我確實對數據集進行了子集處理,以僅包括觸發了20條語句中的至少一條的實例。 我的邏輯對分配值和求和是否正確? 還是巧合,沒有一個語句同時出現?

我想這里有很多事情要做。 假設test是一個data.frametest[i]將為您提供第i 向量化是您的朋友,並且sum將布爾值視為0和1。 無需遍歷data.frame的行並單獨設置每一行,一次執行整個矢量(列)。

set.seed(1234)
test <- data.frame(varA = rbinom(15, 1, .5),
                   varB = rnorm(15, 12, 3),
                   varC = rpois(15, 2))
test$var1 <- test$varA == 1 & test$varB > 10
test$var2 <- test$varC == 0
test$var3 <- test$varA == 0 & test$varB < 12
test
#>    varA      varB varC  var1  var2  var3
#> 1     0 14.950211    2 FALSE FALSE FALSE
#> 2     1 10.132630    3  TRUE FALSE FALSE
#> 3     1  9.805392    2 FALSE FALSE FALSE
#> 4     1 10.449991    1  TRUE FALSE FALSE
#> 5     1  6.747800    3 FALSE FALSE FALSE
#> 6     1 14.640312    0  TRUE  TRUE FALSE
#> 7     0 16.110031    1 FALSE FALSE FALSE
#> 8     0  6.938019    3 FALSE FALSE  TRUE
#> 9     1 10.117691    2  TRUE FALSE FALSE
#> 10    1 12.054950    1  TRUE FALSE FALSE
#> 11    1 14.115730    2  TRUE FALSE FALSE
#> 12    1 10.058943    2  TRUE FALSE FALSE
#> 13    0 14.604543    3 FALSE FALSE FALSE
#> 14    1 13.126907    1  TRUE FALSE FALSE
#> 15    0 12.930787    3 FALSE FALSE FALSE
rowSums(test[,4:6])
#>  [1] 0 1 0 1 0 2 0 1 1 1 1 1 0 1 0

reprex軟件包 (v0.3.0)創建於2019-09-17

作者在下面評論說,這是一個data.table ,它解釋了test[i]語法。 這是更新的解決方案。

library(data.table)
set.seed(1234)
test <- data.table(varA = rbinom(15, 1, .5),
                   varB = rnorm(15, 12, 3),
                   varC = rpois(15, 2))
test[,var1 := test$varA == 1 & test$varB > 10]
test[,var2 := test$varC == 0]
test[,var3 := test$varA == 0 & test$varB < 12]
test
#>     varA      varB varC  var1  var2  var3
#>  1:    0 14.950211    2 FALSE FALSE FALSE
#>  2:    1 10.132630    3  TRUE FALSE FALSE
#>  3:    1  9.805392    2 FALSE FALSE FALSE
#>  4:    1 10.449991    1  TRUE FALSE FALSE
#>  5:    1  6.747800    3 FALSE FALSE FALSE
#>  6:    1 14.640312    0  TRUE  TRUE FALSE
#>  7:    0 16.110031    1 FALSE FALSE FALSE
#>  8:    0  6.938019    3 FALSE FALSE  TRUE
#>  9:    1 10.117691    2  TRUE FALSE FALSE
#> 10:    1 12.054950    1  TRUE FALSE FALSE
#> 11:    1 14.115730    2  TRUE FALSE FALSE
#> 12:    1 10.058943    2  TRUE FALSE FALSE
#> 13:    0 14.604543    3 FALSE FALSE FALSE
#> 14:    1 13.126907    1  TRUE FALSE FALSE
#> 15:    0 12.930787    3 FALSE FALSE FALSE
rowSums(test[, 4:6, with=FALSE])
#>  [1] 0 1 0 1 0 2 0 1 1 1 1 1 0 1 0

reprex軟件包 (v0.3.0)創建於2019-09-17

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM