我有一个小标题,其中存储了在海中不同点和不同深度处获取的变量,但我需要按照特定公式将同一点的所有深度浓缩为一行(值X和X + 1乘以X + 1的深度减去X的深度,依此类推...),这是我在excel上写的,目的是更好地解释我要做的事情
这是我正在使用的(编辑过的)数据的一小部分
long lat station depth no3
<dbl> <dbl> <dbl> <dbl> <dbl>
1 -71.1 -32 1 0 9
2 -71.1 -32 1 5 14
3 -71.1 -32 1 10 10
4 -71.1 -32 1 20 11
5 -71.6 -32 2 0 13
6 -71.6 -32 2 5 8
7 -71.6 -32 2 10 2
8 -71.6 -32 2 20 6
9 -71.6 -32 2 50 4
10 -71.6 -32 2 75 9
# ... with 942 more rows
根据我在类似问题中的阅读内容,我可以使用aggregate
或merge
,但是这些仅用于求和,并且我不知道如何获取它来求解整个方程。我将不胜感激任何建议,我是R的新手,如果我不太清楚(或者解决方案实际上很简单),对不起
答案 0 :(得分:0)
您可以使用lead
函数根据下一行的数据创建总和(对上一行使用lag
,然后在{{ 1}}:
sum
请注意,总和中的summarize
是关键,因为df <- data.frame(
depth = c(0, 5, 10, 20, 50),
NO3 = c(3, 5, 6, 2, 3)) %>%
mutate(a = (lead(NO3) + NO3)*(lead(depth) - depth))
df
depth NO3 a
1 0 3 40
2 5 5 55
3 10 6 80
4 20 2 150
5 50 3 NA
df %>%
summarize(b = sum(a, na.rm = TRUE))
b
1 325
函数在最后一行中创建了na.rm
值。可以使用lead
参数填充这些内容。
编辑:
如果您想将此应用到不止一列,可以通过添加NA
或{{1来使用default
和mutate
的“范围”变体}}到这些功能的末尾。
summarize
_at
函数需要名称向量或索引向量来确定要对哪些列进行操作。所有这三个都将返回相同的内容,其中_if
表示被修改的列:
df2 <- data.frame(
depth = c(0, 5, 10, 20, 50),
NO3 = c(3, 5, 6, 2, 3),
NO4 = c(1, 2, 3, 4, 5),
NO5 = c(5, 4, 3, 2, 1))
_at
函数需要一个“谓词函数”来确定是否对列进行操作。可以检查列名称的任何一种都可以使用:
.x