我有一个带有以下变量的数据框:
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的新手,我们将不胜感激。
答案 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
的解决方案,使用另一个可重现的示例解决NA
中end_point
在ifelse
中的问题(使用# 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()