У меня есть фрейм данных со следующими переменными:

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, любая помощь будет принята с благодарностью.

1
Jdj67 13 Сен 2018 в 13:42

2 ответа

Лучший ответ

Решение с dplyr, использующее другой воспроизводимый пример для решения ситуации с NA в end_point, как в комментарии OP (с 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
1
ztl 13 Сен 2018 в 12:29

Возможно, есть более изящные способы сделать это, но вот краткая версия:

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 ваших данных.

3
duckmayr 13 Сен 2018 в 10:49