我有这样的数据
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
的新列作为 deposit
、dep_cert
、capital
的总和,和盈余
。这意味着数据将如下所示。
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/