在R中具有起点和终点变量的范围内求和

时间:2018-09-13 10:42:35

标签: r range

我有一个带有以下变量的数据框:

start_point    end_point    variable_X
     1             5           0.3757
     2             7           0.4546       
     3             7           0.1245 
     4             8           0.3455
     5             11          0.2399 
     6             12          0.0434
     7             15          0.4323
     ...           ...           ... 

我想添加第四列,该列将变量X从起点到头两列中定义的终点相加,即第一行中的条目将是1到5(含)之间的总和:0.3757 + 0.4546 + 0.1245 + 0.3455 + 0.2399 = 1.5402,第二行中的条目总和为2和7(含)之间:0.4546 + 0.1245 + 0.3455 + 0.2399 + 0.0434 + 0.4323 = 1.6402,以此类推。

我是R的新手,我们将不胜感激。

2 个答案:

答案 0 :(得分:3)

执行此操作的方法可能比较宽松,但这是一个快速版本:

df$sumX <- apply(df, 1, function(x) sum(df$variable_X[x[1]:x[2]]))
df

  start_point end_point variable_X   sumX
1           1         5     0.3757 1.5402
2           2         7     0.4546 1.6402
3           3         7     0.1245 1.1856
4           4         8     0.3455     NA
5           5        11     0.2399     NA
6           6        12     0.0434     NA
7           7        15     0.4323     NA

最后几行是NA,因为我没有数据的第8至15行。

答案 1 :(得分:1)

使用dplyr的解决方案,使用另一个可重现的示例解决NAend_pointifelse中的问题(使用# Reproducible example mydf = data.frame(start_point = 1:9, end_point = c(5, NA, 7, 8, 11, 12, 7, 15, NA), variable_X = c(1, 5, 2, 3, 5, 4, 2, 1, 2)) library(dplyr) mydf %>% rowwise() %>% mutate(sumX = ifelse(is.na(end_point), NA, sum(mydf$variable_X[start_point:end_point]))) # start_point end_point variable_X sumX # <int> <dbl> <dbl> <dbl> # 1 1 5 1 16 # 2 2 NA 5 NA # 3 3 7 2 16 # 4 4 8 3 15 # 5 5 11 5 NA # 6 6 12 4 NA # 7 7 7 2 2 # 8 8 15 1 NA # 9 9 NA 2 NA ):

replace()