簡體   English   中英

有條件地對 r 中的動態列求和

[英]Conditionally sum dynamic columns in r

我試圖根據它們是大於還是小於 0 對許多列有條件地求和。我很驚訝我找不到dplyrdata.table解決這個問題。 我想為大型 data.frame 計算 4 個新列(要計算的列位於帖子底部)。

dat2=matrix(nrow=10,rnorm(100));colnames(dat2)=paste0('V',rep(1:10))

dat2 %>% as.data.frame() %>%
  rowwise() %>%
  select_if(function(col){mean(col)>0}) %>%
  mutate(sum_pos=rowSums(.))  ##Obviously doesn't work

這些是我想要計算的簡單統計數據(是的;這些 apply 語句有效,但是我想要做的 dplyr 鏈中還有其他事情,所以這就是我尋找dplyrdata.table方式的原因。列是每個給定行的正數或負數都不同,因此我無法獲取列列表(必須按行動態完成)。

#Calculate these, but in a dplyr chain?
n_pos=apply(dat2,1,function(x) sum((x>0)))
n_neg=apply(dat2,1,function(x) sum((x<0)))
sum_pos=apply(dat2,1,function(x) sum(x[(x>0)]))
sum_neg=apply(dat2,1,function(x) sum(x[(x<0)]))

我們不需要rowwiserowSums因為rowSums可以在沒有任何分組的情況下進行求和

library(dplyr)
dat2 %>%
   as.data.frame() %>%  
   select_if(~ is.numeric(.) && mean(.) > 0) %>% 
   mutate(sum_pos = rowSums(.))

根據描述,似乎不是mean條件,而是與rowwise有關,分別是正負值sum

dat2 %>%
   as.data.frame %>%
   mutate(sum_pos = rowSums(. * NA^(. < 0), na.rm = TRUE),
           sum_neg = rowSums(.[1:10] * NA^(.[1:10] > 0), na.rm = TRUE) )

暫無
暫無

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

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