r语言 - 为什么我总和()总结为零,没有NAs,只有数值数据?



再问一个很简单的问题。

我试着把所有的排放量加在一起,基本上是每行加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)

相关内容

最新更新