【发布时间】:2020-07-28 19:27:59
【问题描述】:
我有一个数据集,其中包含针对给定位置的许多观测值。每个观察(由具有多列描述符的站点定义)包含一个测量值(也由多列描述符定义)。作为一个精简的例子:
t<-tibble(loc_name=c('A','A', 'B', 'B', 'C', 'C'),
loc_desc=c('X', 'X', 'Y', 'Y', 'Z', 'Z'),
qualifier=c(NA, NA, NA, 'U', 'J', NA),
analyte=rep(c('Clay', 'Silt'),3),
units=rep('percent',6),
values=c(0.25, 1, 0.5, 2, 0.75, 3))
loc_name loc_desc qualifier analyte units values
<chr> <chr> <chr> <chr> <chr> <dbl>
1 A X NA Clay percent 0.25
2 A X NA Silt percent 1
3 B Y NA Clay percent 0.5
4 B Y U Silt percent 2
5 C Z J Clay percent 0.75
6 C Z NA Silt percent 3
在此数据中,“loc_name”和“loc_desc”描述了分别收集淤泥和粘土的样本位置。 “qualifier”、“analyte”和“units”都是关于“values”的信息。
我需要做的是计算一个新的分析物值,“细粒”(粘土 + 淤泥)。我会将表格旋转得更宽以使其变得简单,但鉴于列中的信息量,它最终看起来像:
t %>%
pivot_wider(names_from=analyte, values_from=values)
loc_name loc_desc qualifier units Clay Silt
<chr> <chr> <chr> <chr> <dbl> <dbl>
1 A X NA percent 0.25 1
2 B Y NA percent 0.5 NA
3 B Y U percent NA 2
4 C Z J percent 0.75 NA
5 C Z NA percent NA 3
这并不完全适合计算。
最终结果应如下所示:
loc_name loc_desc qualifier analyte units values
<chr> <chr> <chr> <chr> <chr> <dbl>
1 A X NA Clay percent 0.25
2 A X NA Silt percent 1
3 A X NA Fines percent 1.25
4 B Y NA Clay percent 0.5
5 B Y U Silt percent 2
6 B Y NA Fines percent 2.5
7 C Z J Clay percent 0.75
8 C Z NA Silt percent 3
9 C Z NA Fines percent 3.75
有没有一种方法可以在不组合所有位置修改列和值修改列的情况下进行此计算?或者如果我必须这样做,有没有办法做到这一点,而不是一团糟(记住我实际上总共有 19 列信息)?我现在唯一的解决方案是制作一个全新的小标题,在其中计算每个样本的“罚款”并将其作为新行附加回来(我认为这应该可行?但它似乎不优雅)。
感谢您的帮助!
【问题讨论】: