r - R 中的 egen rowtotal (Stata) 等价物?

标签 r rstudio stata

我有这样的数据

bankname    bankid  year    deposit dep_cert capital    surplus
Bank A         1    1881    244789  7250       20218    29513
Bank B         2    1881    195755  10243     185151    NA 
Bank C         3    1881    107736  13357     177612    NA
Bank D         4    1881    170600  NA         20000    NA
Bank E         5    1881    320000  351266    314012    NA

这是复制数据的代码。

bankname <- c("Bank A","Bank B","Bank C","Bank D","Bank E")
bankid <- c( 1, 2,  3,  4,  5)
year<- c( 1881, 1881,   1881,   1881,   1881)
deposit  <- c(244789,    195755, 107736, 170600, 32000000)
dep_cert<-c(7250,10243,13357,NA,351266)
capital<-c(20218,185151,177612,20000,314012)
surplus<-c(29513,NA,NA,NA,NA)
bankdata<-data.frame(bankname, bankid,year,deposit, dep_cert, capital, surplus)

我想创建一个名为 liability 的新列作为 depositdep_certcapital 的总和,和盈余。这意味着数据将如下所示。

bankname    bankid  year    deposit dep_cert capital    surplus liability
Bank A         1    1881    244789  7250       20218    29513   301770 
Bank B         2    1881    195755  10243     185151    NA      391149
Bank C         3    1881    107736  13357     177612    NA      298705
Bank D         4    1881    170600  NA         20000    NA      190600
Bank E         5    1881    320000  351266    314012    NA      32665278

但是,当我在 R 中使用 sum 命令时,由于缺少值,我得到了 NA。在 Stata 中,我会做

egen liability = rowtotal(deposit, dep_cert,capital, surplus)

R 中的等效代码是什么?

此外,我的第二个问题是,要用数据中的数字 0 替换所有缺失值 (NA),在 Stata 中,我会这样做

foreach x of varlist deposit dep_cert capital surplus {
    replace `x'=0 if missing(`x')
}

R 中的等效代码是什么?

最佳答案

在这种情况下,等效项是 rowSums:

rowSums(bankdata[c("deposit", "dep_cert", "capital", "surplus")], na.rm = TRUE)
# [1]   301770   391149   298705   190600 32665278

您缺少的主要内容是 na.rm = TRUE 参数。

要将它添加到您的 data.frame,您需要:

bankdata$liability <- rowSums(bankdata[c("deposit", "dep_cert", 
                                         "capital", "surplus")], 
                              na.rm = TRUE)

要将同一列中的 NA 值替换为“0”,您可以执行以下操作:

## save some typing
cols <- c("deposit", "dep_cert", "capital", "surplus")

bankdata[cols][is.na(bankdata[cols])] <- 0
bankdata
#   bankname bankid year  deposit dep_cert capital surplus
# 1   Bank A      1 1881   244789     7250   20218   29513
# 2   Bank B      2 1881   195755    10243  185151       0
# 3   Bank C      3 1881   107736    13357  177612       0
# 4   Bank D      4 1881   170600        0   20000       0
# 5   Bank E      5 1881 32000000   351266  314012       0

关于r - R 中的 egen rowtotal (Stata) 等价物?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26165544/

相关文章:

r - 计算非线性回归的 R^2 值

r - 如何在 R 中加载微秒精度时间序列?

yaml - 如何使用 YAML block 指定 pandoc 的 Markdown 扩展?

excel - 基于矩阵在 Excel 或 Stata 中创建假标识符

graph - 如何摆脱 Stata -by()- 图中的模糊边界

R:如何获取每个日期和小时的频率计数

r - 确定哪些点位于 R 中不规则形状的数据足迹之外?

amazon-web-services - 如何设置 RStudio 服务器以在 AWS 上使用 SSL 运行?

r - 具有来自 selectInput 的多个条件的 Shiny R observeEvent

stata - 在特定替代数据组织过程中,如何避免某个变量的重复?