基于dplyr tidyr的子集无法在R

时间:2019-06-14 05:30:40

标签: r dplyr tidyr

我在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_F中的值等于X_F2将X_A中的值传输到X_A2。

  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

我要求某人看看。也尝试过其他方法,但那显然不起作用

0 个答案:

没有答案