簡體   English   中英

根據 R 中的另一列有條件地對一系列列進行求和

[英]Conditionally sum a range of columns based on another column in R

我已經查看了其他幾個相關的問題,但還沒有真正找到符合我的情況的東西。

我有一列指示將多少列匯總到一個新列中。

  • 如果DEPENDENCY == INDEP那么NET_AGI = IND_AGI
  • 如果DEPENDENCY == DEP那么NET_AGI = PRO_AGI + IND_AGI
  • 否則NET_AGI = PRO_AGI
DEPENDENCY IND_AGI PRO_AGI  NET_AGI <- NET_AGI will be the summed column
INDEP      0049995    -     0049995
DEP        0000500 0090500  0091000
DEP        0009000 0121095  0130950
DEP           -    0375001  0375001
INDEP      0123456    -     0123456
DEP        0012070 1023030  1035100
...

最好的方法是什么?

可能最快(也是最簡單的)方法之一是

df$NET_AGI = df$PRO_AGI
df[df$DEPENDENCY == 'INDEP', 'NET_AGI'] = df[df$DEPENDENCY == 'INDEP', 'IND_AGI']
df[df$DEPENDENCY == 'DEP', 'NET_AGI'] = rowSums(df[df$DEPENDENCY == 'DEP', c('PRO_AGI', 'IND_AGI')], na.rm = T)

如果您想按原樣讀取數據集並按原樣進行這項工作,請使用以下內容。 請注意,這假定七個字符格式不是必需的。

df <- read.table(text="DEPENDENCY IND_AGI PRO_AGI  NET_AGI
INDEP      0049995    -     0049995
DEP        0000500 0090500  0091000
DEP        0009000 0121095  0130950
DEP           -    0375001  0375001
INDEP      0123456    -     0123456
DEP        0012070 1023030  1035100",
  stringsAsFactors = F, header=T, na.strings = c('NA', '-'))
library(dplyr)

df1 %>% 
  mutate(NET_AGI_2 = case_when (DEPENDENCY == "DEP" ~ as.character(sprintf('%07d', rowSums(
                                                      cbind(as.numeric(IND_AGI), 
                                                            as.numeric(PRO_AGI)) , 
                                                      na.rm = T))),
                                DEPENDENCY == "INDEP" ~ IND_AGI,
                                TRUE ~ PRO_AGI))

#>   DEPENDENCY IND_AGI PRO_AGI NET_AGI NET_AGI_2
#> 1      INDEP 0049995       -   49995   0049995
#> 2        DEP 0000500 0090500   91000   0091000
#> 3        DEP 0009000 0121095  130950   0130095
#> 4        DEP       - 0375001  375001   0375001
#> 5      INDEP 0123456       -  123456   0123456
#> 6        DEP 0012070 1023030 1035100   1035100

數據:

read.table(text="DEPENDENCY IND_AGI PRO_AGI  NET_AGI
INDEP      0049995    -     0049995
DEP        0000500 0090500  0091000
DEP        0009000 0121095  0130950
DEP           -    0375001  0375001
INDEP      0123456    -     0123456
DEP        0012070 1023030  1035100",stringsAsFactors = F, header=T) -> df1

暫無
暫無

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

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