dplyr:特定行之间的差异

dplyr:特定行之间的差异,r,dplyr,R,Dplyr,使用此data.frame 数据 df <- read.table(text = c(" id measured simulated Site1 9.10 9.20 Site2 126.00 129.02 Site3 1.00 1.15 Site4 84.50 85.77 Site5 115.60 119.30 Site6 12.10 12.26 Site7 163.10 167.18 Site8

使用此data.frame

数据

df <- read.table(text = c("
                 id measured    simulated
Site1   9.10    9.20
Site2   126.00  129.02
Site3   1.00    1.15
Site4   84.50   85.77
Site5   115.60  119.30
Site6   12.10   12.26
Site7   163.10  167.18
Site8   74.10   75.51
Site9   19.20   19.74
Site10  74.80   77.12
Site11  287.80  300.46
Site12  13.40   13.76
Site13  283.60  288.70
Site14  475.70  495.68
Site15  741.20  779.74
Site16  2215.10 2398.95 "), header = T)

我将非常感谢您对如何在R中实现这一点的建议。

就像@akrun所说的,这里没有真正的模式,所以您可以这样做:

df$measured.diff = with(df, c(measured[1:10], 
                              measured[11:13]-measured[2:4],
                              measured[14]-sum(measured[c(3,7,12)]),
                              measured[15]-sum(measured[c(1,8,9,10,13)]),
                              measured[16]-sum(measured[c(5,6,11,14,15)])))
然后您可以对df$simulated.diff执行相同的操作

或者,由于您多次执行相同的自定义计算,因此创建自己的自定义函数是有意义的

custom_diff = function(vec){
  c(vec[1:10],
    vec[11:13]-vec[2:4],
    vec[14]-sum(vec[c(3,7,12)]),
    vec[15]-sum(vec[c(1,8,9,10,13)]),
    vec[16]-sum(vec[c(5,6,11,14,15)]))
}

df$measured.diff = custom_diff(df$measured)
df$simulated.diff = custom_diff(df$simulated)

这似乎是一个自定义的计算,而不是任何模式非常感谢您的时间和帮助。
custom_diff = function(vec){
  c(vec[1:10],
    vec[11:13]-vec[2:4],
    vec[14]-sum(vec[c(3,7,12)]),
    vec[15]-sum(vec[c(1,8,9,10,13)]),
    vec[16]-sum(vec[c(5,6,11,14,15)]))
}

df$measured.diff = custom_diff(df$measured)
df$simulated.diff = custom_diff(df$simulated)