R: Adding NAs into Data Frame

后端 未结 5 913
刺人心
刺人心 2020-12-11 18:04

I have a data frame like so:

Name   Position   Value
a         1        0.2
a         3        0.4
a         4        0.3
b         1        0.5
b         2          


        
5条回答
  •  暗喜
    暗喜 (楼主)
    2020-12-11 18:33

    You could use data.table

     library(data.table)
     DT <- data.table(df)
     setkey(DT, Position)
     DT[, .SD[J(1:5), roll=FALSE], by=Name][order(Name, Position),]
     #   Name Position Value
     #1:    a        1   0.2
     #2:    a        2    NA
     #3:    a        3   0.4
     #4:    a        4   0.3
     #5:    a        5    NA
     #6:    b        1   0.5
     #7:    b        2   0.4
     #8:    b        3    NA
     #9:    b        4    NA
    #10:    b        5   0.3
    #11:    c        1    NA
    #12:    c        2   0.3
    #13:    c        3   0.4
    #14:    c        4    NA
    #15:    c        5   0.1
    #16:    d        1   0.2
    #17:    d        2   0.4
    #18:    d        3   0.5
    #19:    d        4    NA
    #20:    d        5    NA
    

    Or you can use tidyr/dplyr

     library(dplyr)
     library(tidyr)
    
      df %>% 
          spread(Position, Value) %>%
          gather(Position, Value, `1`:`5`) %>%
          arrange(Name, Position)    
    

    data

     df <- structure(list(Name = c("a", "a", "a", "b", "b", "b", "c", "c", 
     "c", "d", "d", "d"), Position = c(1L, 3L, 4L, 1L, 2L, 5L, 2L, 
     3L, 5L, 1L, 2L, 3L), Value = c(0.2, 0.4, 0.3, 0.5, 0.4, 0.3, 
     0.3, 0.4, 0.1, 0.2, 0.4, 0.5)), .Names = c("Name", "Position", 
     "Value"), class = "data.frame", row.names = c(NA, -12L))
    

提交回复
热议问题