如何在小标题的行之间进行操作?

时间:2020-07-27 06:12:27

标签: r function tidyverse tibble

我有一个小标题,其中存储了在海中不同点和不同深度处获取的变量,但我需要按照特定公式将同一点的所有深度浓缩为一行(值X和X + 1乘以X + 1的深度减去X的深度,依此类推...),这是我在excel上写的,目的是更好地解释我要做的事情

enter image description here

这是我正在使用的(编辑过的)数据的一小部分

        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 

根据我在类似问题中的阅读内容,我可以使用aggregatemerge,但是这些仅用于求和,并且我不知道如何获取它来求解整个方程。我将不胜感激任何建议,我是R的新手,如果我不太清楚(或者解决方案实际上很简单),对不起

1 个答案:

答案 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来使用defaultmutate的“范围”变体}}到这些功能的末尾。

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