再问一个很简单的问题。
我试着把所有的排放量加在一起,基本上是每行加5个变量。
但是,即使我没有NAs并且只有数字值,它也会一直求和为零。
这是我正在处理的数据:
df_structure <-
structure(
list(
`Particeles_PM10_[kg]_WTW_whole transport chain` = c(
0.000440486,
0.010753239,
0.0005393157,
0.0107265319,
0.200272577,
0.169998242
),
`SO2_[kg]_WTW_whole transport chain` = c(
0.0034873728,
0.1861534833,
0.01613152798,
0.185923214,
3.715316736,
3.155906431
),
`NOX_[kg]_WTW_whole transport chain` = c(
0.024214311,
0.618727269,
0.053631226,
0.617528662,
12.271221,
10.3988076
),
`NMHC_[kg]_WTW_whole transport chain` = c(
0.0043159575,
0.0385331658,
0.0033238124,
0.038634107,
0.7067915367,
0.59608807
)
),
row.names = c(NA,-6L),
class = c("tbl_df", "tbl", "data.frame")
)
下面是我的代码:
df_structure %>%
rowwise() %>%
mutate(sum_emissions = sum(as.numeric("Particeles_PM10_[kg]_WTW_whole transport chain",
"SO2_[kg]_WTW_whole transport chain",
"NOX_[kg]_WTW_whole transport chain",
"NMHC_[kg]_WTW_whole transport chain"), na.rm = TRUE))
summary(df_structure$sum_emissions)
我做错了什么?我可以打开我的data.frame,每一列都有5行填充数据,但总和一直是0…
提前感谢!
您可以使用across()
选择要求和的列,并将整个across()
传递给rowSums()
。
library(dplyr)
df_structure %>%
mutate(sum_emissions = rowSums(across(everything())))
# # A tibble: 6 × 5
# `Particeles_PM10_[kg]…` `SO2_[kg]_WTW_…` `NOX_[kg]_WTW_…` `NMHC_[kg]_WTW…` sum_emissions
# <dbl> <dbl> <dbl> <dbl> <dbl>
# 1 0.000440 0.00349 0.0242 0.00432 0.0325
# 2 0.0108 0.186 0.619 0.0385 0.854
# 3 0.000539 0.0161 0.0536 0.00332 0.0736
# 4 0.0107 0.186 0.618 0.0386 0.853
# 5 0.200 3.72 12.3 0.707 16.9
# 6 0.170 3.16 10.4 0.596 14.3
您需要指定它是使用c()
和' 's的变量向量。由于您的输出已经是数字,因此不需要指定它。
df_structure %>%
rowwise() %>%
mutate(sum_emissions = sum(c(`Particeles_PM10_[kg]_WTW_whole transport chain`,
`SO2_[kg]_WTW_whole transport chain`,
`NOX_[kg]_WTW_whole transport chain`,
`NMHC_[kg]_WTW_whole transport chain`), na.rm = TRUE)) %>%
ungroup()
更简单的方法可能是使用c_across
:
df_structure %>%
rowwise() %>%
mutate(sum_emissions = sum(c_across(1:4), na.rm = TRUE)) %>%
ungroup()
一个基本的解决方案是直接使用rowSums
(或通过mutate
):
df_structure$sum_emissions <- rowSums(df_structure)