Подмножество на основе dplyr tidyr не работает в R - PullRequest
0 голосов
/ 14 июня 2019

У меня есть следующий фрейм данных, созданный в R

 df<-data.frame("X_F"=c(5,10,20,200, 5,10,15,25,30,60,200, NA), 
 "X_A"=c(1,2,3,4,1,2,3,4,5,6,7,NA),"Y_F"=c(5,20,200, NA, 5,12,16,25,100, NA, 
  NA, NA), "Y_A"=c(1,2,3,NA, 1,2,3,4,5,NA, NA, NA), "Z_F"=c(5,10,20,100, 
  4,12,1,7,30,100,200, 250), 'Z_A'=c(1,2,3,4,1,3,4,5,6,7,9,10), "ID"=c("A", 
  "A", "A", "A", "B", "B", "B",  "B","B","B", "B", "B"))

Фрейм данных имеет разные записи в разных строках и выглядит следующим образом

     X_F X_A Y_F Y_A Z_F Z_A ID
 1    5   1   5   1   5   1  A
 2   10   2  20   2  10   2  A
 3   20   3 200   3  20   3  A
 4  200   4  NA  NA 100   4  A
 5    5   1   5   1   4   1  B
 6   10   2  12   2  12   3  B
 7   15   3  16   3   1   4  B
 8   25   4  25   4   7   5  B
 9   30   5 100   5  30   6  B
 10  60   6  NA  NA 100   7  B
 11 200   7  NA  NA 200   9  B
 12  NA  NA  NA  NA 250  10  B

далее Я создал новый столбец с именемSF, который включает в себя все значения в X_F, Y_F Z_F как последовательность, разделенную единицей.

library(dplyr)
library(tidyr)


  df=df %>% group_by(ID) %>% 
  mutate(SF=pmax(X_F,Y_F,Z_F,na.rm = TRUE)) %>%
  complete(SF=full_seq(SF,1))

Далее я создал следующие столбцы

df[c("X_F2", "Y_F2", "Z_F2") ]<-df$SF
df[c("X_A2", "Y_A2", "Z_A2")]<-NA

Следующий код должен передавать значения в X_A в X_A2 на основе значений в X_F, равных X_F2.

  df<-df%>%group_by(ID)%>%
  mutate(X_A2, case_when(X_F2==X_F~X_A))%>%
  mutate(Y_A2, case_when(Y_F2==Y_F~Y_A))%>%
  mutate(Z_A2, case_when(Z_F2==Z_F~Z_A))

Я не получаю ожидаемый результат

Ожидаемый результат должен быть следующим:

 head(data.frame(df$`case_when(X_F2 == X_F ~ X_A)`, df$X_F2),10)

   df..case_when.X_F2....X_F...X_A.. df.X_F2
                               1       5
                              NA       6
                              NA       7
                              NA       8
                              NA       9
                              2       10
                              NA      11
                              NA      12
                              NA      13
                              NA      14

Однако я получаю следующий вывод

df..case_when.X_F2....X_F...X_A.. df.X_F2
                              1       5
                             NA       6
                             NA       7
                             NA       8
                             NA       9
                             NA      10
                             NA      11
                             NA      12
                             NA      13
                             NA      14

Я прошу кого-нибудь взглянуть.также пытался еще, если, но это явно не работает

...