如何逐行求和?

tno*_*rio 4 geography row r sum dataframe

我现在是 R 的新手...所以我正在将人口普查研究作为一个大学项目。\n作为说明,这是我的 data.frame 的一部分

\n\n
             MUN          X1990  X1991  X1992 X1993\n1     Angra dos Reis (RJ)    11    10    10    10\n2            Aperib\xc3\xa9 (RJ)    NA    NA    NA    NA\n3           Araruama (RJ)  12040 14589 14231 14231\n4              Areal (RJ)    NA    NA    NA     3\n5 Arma\xc3\xa7\xc3\xa3o dos B\xc3\xbazios (RJ)    NA    NA    NA    NA\n
Run Code Online (Sandbox Code Playgroud)\n\n

我的问题是,我需要对我知道/将指定名称的一些城市行进行求和(因为我不知道它将出现的顺序,或者它们是否会出现在我的所有表中),并且应该显示结果连续。

\n\n

例如,\ni 希望对“Areal”行与“Angra dos Reis”行进行求和,并将结果存储在另一个创建的行中(让我们调用结果行:X)\n所以结果应该是:

\n\n
             MUN          X1990  X1991  X1992 X1993\n1     Angra dos Reis (RJ)    11    10    10    10\n2            Aperib\xc3\xa9 (RJ)    NA    NA    NA    NA\n3           Araruama (RJ)  12040 14589 14231 14231\n4              Areal (RJ)    NA    NA    NA     3\n5 Arma\xc3\xa7\xc3\xa3o dos B\xc3\xbazios (RJ)    NA    NA    NA    NA\n6          X                 11    10    10    13\n
Run Code Online (Sandbox Code Playgroud)\n\n

我尝试创建一个 for 循环和一个 if 循环,但我无法正确执行此操作。

\n

Gre*_*gor 5

这与 Jaap 的评论非常相似,但更详细一些并明确使用行名称:

\n\n
mat = as.matrix(dat[, 2:5])\nrow.names(mat) = dat$MUN\nmat = rbind(mat, colSums(mat[c("Angra dos Reis (RJ)", "Areal (RJ)"), ], na.rm = T))\nrow.names(mat)[nrow(mat)] = "X"\nmat\n#                         X1990 X1991 X1992 X1993\n# Angra dos Reis (RJ)        11    10    10    10\n# Aperib\xc3\xa9 (RJ)               NA    NA    NA    NA\n# Araruama (RJ)           12040 14589 14231 14231\n# Areal (RJ)                 NA    NA    NA     3\n# Arma\xc3\xa7\xc3\xa3o dos B\xc3\xbazios (RJ)    NA    NA    NA    NA\n# X                          11    10    10    13\n
Run Code Online (Sandbox Code Playgroud)\n\n

结果是matrix,如果需要,您可以将其转换回数据框:

\n\n
dat_result = data.frame(MUN = row.names(mat), mat, row.names = NULL)\n
Run Code Online (Sandbox Code Playgroud)\n\n

我不喜欢你的数据作为数据框的格式。我要么将其转换为矩阵(如上所述),要么将其转换为长格式,例如,并使用或tidyr::gather(dat, key = year, value = value, -MUN)“按组”处理它data.tabledplyr

\n\n
\n\n

使用此数据:

\n\n
dat = read.table(text = "             MUN          X1990  X1991  X1992 X1993\n1     \'Angra dos Reis (RJ)\'    11    10    10    10\n2            \'Aperib\xc3\xa9 (RJ)\'    NA    NA    NA    NA\n3           \'Araruama (RJ)\'  12040 14589 14231 14231\n4              \'Areal (RJ)\'    NA    NA    NA     3\n5 \'Arma\xc3\xa7\xc3\xa3o dos B\xc3\xbazios (RJ)\'    NA    NA    NA    NA", header= T)\n
Run Code Online (Sandbox Code Playgroud)\n