新列中的计算

问题描述

我在两天内测量了两种土壤类型的化合物排放量。

现在我想计算每天每种土壤类型的总排放量中有多少丙酮和乙醛。我想在我的数据中创建一个新列,例如(丙酮排放量/总排放量)*100 计算。

有什么想法吗?

这是数据

df <- structure(list(soil_type = c("SOC<10","SOC<10","SOC>10","SOC>10"),compound = c("Acetaldehyde","Acetaldehyde","Acetone","Total emission","Total emission"),day = c(0L,4L,0L,4L),mean = c(0.03,0.07,0.02,0.04,0.06,0.11,0.01,0.05,0.08,0.13)),row.names = c(NA,-12L),groups = structure(list(soil_type = c("SOC<10","Total emission"
),.rows = structure(list(1:2,3:4,5:6,7:8,9:10,11:12),ptype = integer(0),class = c("vctrs_list_of","vctrs_vctr","list"))),-6L),class = c("tbl_df","tbl","data.frame"),.drop = TRUE),class = c("grouped_df","tbl_df","data.frame"))

解决方法

对于每个 soil_typeday,您可以计算丙酮排放量/总排放量*100 的比率。

library(dplyr)

df %>%
  group_by(soil_type,day) %>%
  mutate(ratio = mean[match('Acetone',compound)]/
                 mean[match('Total emission',compound)] * 100) %>%
  ungroup -> result

result

#   soil_type compound         day  mean ratio
#   <chr>     <chr>          <int> <dbl> <dbl>
# 1 SOC<10    Acetaldehyde       0  0.03  33.3
# 2 SOC<10    Acetaldehyde       4  0.07  36.4
# 3 SOC<10    Acetone            0  0.02  33.3
# 4 SOC<10    Acetone            4  0.04  36.4
# 5 SOC<10    Total emission     0  0.06  33.3
# 6 SOC<10    Total emission     4  0.11  36.4
# 7 SOC>10    Acetaldehyde       0  0.01  62.5
# 8 SOC>10    Acetaldehyde       4  0.04  53.8
# 9 SOC>10    Acetone            0  0.05  62.5
#10 SOC>10    Acetone            4  0.07  53.8
#11 SOC>10    Total emission     0  0.08  62.5
#12 SOC>10    Total emission     4  0.13  53.8

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...