Возврат n-й ячейки в определенном столбце с использованием суммирования в ddply в R - PullRequest
0 голосов
/ 19 октября 2018

Я пытаюсь вернуть n-ую строку для каждого идентификатора в определенном столбце с помощью суммирования с помощью ddply.В приведенном ниже примере, скажем, 2-я ячейка для каждого идентификатора в столбце b.

id <- c(1, 1, 2, 2, 3, 3, 4, 4, 5, 5)
b <- c(9, 9, 9, 7, 5, 4, NA, NA, 3, 2)
c <- c(2, 3, 6, 7, 4, 5, 3, NA, 4, 7)
df <- data.frame(id,b,c)
df


   a  b  c
1  1  9  2
2  1  9  3
3  2  9  6
4  2  7  7
5  3  5  4
6  3  4  5
7  4 NA  3
8  4 NA NA
9  5  3  4
10 5  2  7

Я пробовал следующее:

df_2 <- ddply(df, ~a, summarise, 
              b_mean_per_id = mean(b, na.rm = TRUE),
              second_b = nth(df$b, 2))

, который возвращает только вторую ячейку в b (недля каждого идентификатора)

 a b_mean_per_id second_b
1 1           9.0        9
2 2           8.0        9
3 3           4.5        9
4 4           NaN        9
5 5           2.5        9

Но то, что я хочу:

 a b_mean_per_id second_b
1 1           9.0        9
2 2           8.0        7
3 3           4.5        4
4 4           NaN        NA
5 5           2.5        2

Любой намек высоко ценится:)

1 Ответ

0 голосов
/ 19 октября 2018

С dplyr мы можем сделать

library(dplyr)

df %>%
  group_by(id) %>%
  summarise(b_mean = mean(b, na.rm = TRUE), 
            second_b = b[2])

#     id b_mean second_b
#   <dbl>  <dbl>    <dbl>
#1    1.   9.00       9.
#2    2.   8.00       7.
#3    3.   4.50       4.
#4    4.    NA        NA 
#5    5.   2.50       2.

Мы также можем использовать nth вместо прямой подстановки b

df %>%
   group_by(id) %>%
   summarise(b_mean = mean(b, na.rm = TRUE), 
             second_b = nth(b, 2))
...