使用此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)
前10个网站 独立 (不包括任何上游网站)。但最后6个网站 依赖 ,因为它们包含一个或多个网站,如下所示。
我想创建两个新列measured_diff
和simulated_diff
。这些列中的值将是 独立 ,这意味着对于最后六个站点,将从任何相关站点中减去上游站点,如下所示。
最终结果
应该是这样的
# id measured simulated measured_diff simulated_diff
#1 Site1 9.1 9.20 9.1 9.20 #independent
#2 Site2 126.0 129.02 126.0 129.02 #independent
#3 Site3 1.0 1.15 1.0 1.15 #independent
#4 Site4 84.5 85.77 84.5 85.77 #independent
#5 Site5 115.6 119.30 115.6 119.30 #independent
#6 Site6 12.1 12.26 12.1 12.26 #independent
#7 Site7 163.1 167.18 163.1 167.18 #independent
#8 Site8 74.1 75.51 74.1 75.51 #independent
#9 Site9 19.2 19.74 19.2 19.74 #independent
#10 Site10 74.8 77.12 74.8 77.12 #independent
#11 Site11 287.8 300.46 161.8 171.44 #site11 - site2
#12 Site12 13.4 13.76 12.4 12.61 #site12 - site3
#13 Site13 283.6 288.70 199.1 202.94 #site13 - site4
#14 Site14 475.7 495.68 298.2 313.59 #site14-(site3+site7+site12)
#15 Site15 741.2 779.74 280.4 309.47 #site15-(site1+site8+site9+site10+site13)
#16 Site16 2215.1 2398.95 582.7 691.51 #site16-(site5+site6+site11+site14+site15)
如果您在R?
中有任何建议,我将不胜感激答案 0 :(得分:1)
就像@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)