Использование group_split в списке списков в R - PullRequest
0 голосов
/ 11 февраля 2020

Я пытаюсь использовать group_split () в списке списков / фреймов данных.

Вот мой код. df - это то, что у меня есть, а final_df - то, к чему я пытаюсь добраться. Имена могут быть брошены. Моя цель состоит в том, чтобы сначала получить единственную строку для уникальных комбинаций a & b.

df <- data.frame(a = c(rep(68,8),rep(70,8)), b = c((1:4),(1:4),(1:4),(1:4)),c = c(rep("Mike",4),rep("Joe",4),rep("Mike",4),rep("Joe",4)), d=c(70,71,75,79,72,69,66,90,70,77,74,72,72,69,66,90), e=c(30,32,44,42,22,23,24,21,30,37,41,42,21,22,24,20))

final_df <- data.frame(a=c(rep(68,4),rep(70,4)), b=c((1:4),(1:4)), d_1 = c(70,71,75,79,70,77,74,72), e_1 = c(30,32,44,42,30,37,41,42), d_2 = c(72,69,66,90,72,69,66,90), e_2 = c(22 ,23,24,21,21,22,24,20))


print(df)
a b    c  d  e
1  68 1 Mike 70 30
2  68 2 Mike 71 32
3  68 3 Mike 75 44
4  68 4 Mike 79 42
5  68 1  Joe 72 22
6  68 2  Joe 69 23
7  68 3  Joe 66 24
8  68 4  Joe 90 21
9  70 1 Mike 70 30
10 70 2 Mike 77 37
11 70 3 Mike 74 41
12 70 4 Mike 72 42
13 70 1  Joe 72 21
14 70 2  Joe 69 22
15 70 3  Joe 66 24
16 70 4  Joe 90 20

print(final_df)

   a b d_1 e_1 d_2 e_2
1 68 1  70  30  72  22
2 68 2  71  32  69  23
3 68 3  75  44  66  24
4 68 4  79  42  90  21
5 70 1  70  30  72  21
6 70 2  77  37  69  22
7 70 3  74  41  66  24
8 70 4  72  42  90  20

, я использую lapply

list <- df %>% group_split(a)

, затем я думаю, что мне нужно сделать то же самое для b , но я не могу заставить группу работать снова. Я написал функцию для исключения group_split в списке списков

func <- function(y){lapply(y, y %>% group_split(b))}
list_2 <- lapply(list,function(x){lapply(x,func)})

, но это не работает. Я получаю эту ошибку

Error in UseMethod("group_split") : 
  no applicable method for 'group_split' applied to an object of class "c('double', 'numeric')"

Я очень ценю любую помощь. Я мог бы пойти по этому поводу совершенно неправильно и окольным. Еще раз спасибо

...