2021年1月21日星期四

Spread record based on value in R

i have a problem with spreading the data only based on ID suppose that i have this data frame

DF <- data.frame(ID=rep(c("1","2","3","1","2","1"), each=1),               m=c(7,7,7,8,8,8),               n=c(8,9,10,9,10,11),               o=c(121,122,123,121,122,122),               p=c(23,24,25,25,25,25)               )  

then, i want to spread it based on ID. Here is the output that i expect

DFR <- data.frame(ID=rep(c("1","2","3"), each=1),                  m1=c(7,7,7),                  n1=c(8,9,10),                  o1=c(121,122,123),                  p1=c(23,24,25),                  m2=c(8,8,0),                  n2=c(9,10,0),                  o2=c(121,122,0),                  p2=c(25,25,0),                  m3=c(8,0,0),                  n3=c(11,0,0),                  o3=c(122,0,0),                  p3=c(25,0,0)  )  

i have tried some codes but mostly failed such as

DF %>% fill(-ID) %>%           spread(key=m:p, value=m:p, sep="", fill="");     chop(DF, ID) %>%       spread(DF, m:p) %>%       unnest(c(m:p));    DF %>% group_by(ID) %>%         select(ID) %>%         mutate(row = paste0("m","n","o","p",row_number())) %>%         spread(row, m,n,o,p);  

Any solutions would be appreciated. Thanks in advance

https://stackoverflow.com/questions/65839126/spread-record-based-on-value-in-r January 22, 2021 at 12:01PM

没有评论:

发表评论