代码之家  ›  专栏  ›  技术社区  ›  nico

防止取消列表删除空值

  •  44
  • nico  · 技术社区  · 16 年前

    unlist NULL 取消列表 好像要掉下来了。

    我怎样才能防止这种情况?

    不需要的特征

    a = c(list("p1"=2, "p2"=5), 
          list("p1"=3, "p2"=4), 
          list("p1"=NULL, "p2"=NULL), 
          list("p1"=4, "p2"=5))
    unlist(a)
     p1 p2 p1 p2 p1 p2 
     2  5  3  4  4  5 
    
    4 回复  |  直到 8 年前
        1
  •  32
  •   Fojtasek    16 年前

    问题是你不能 NULL 在向量的中间。例如:

    > c(1,NULL,3)
    [1] 1 3
    

    不过你可以让娜在中间。您可以将其转换为字符,然后再转换回数字,这将自动将空值转换为NA(带有警告):

    > b <- as.numeric(as.character(a))
    Warning message:
    NAs introduced by coercion 
    

    然后将名称放回,因为它们已被上一个操作删除:

    > names(b) <- names(a)
    > b
    p1 p2 p1 p2 p1 p2 p1 p2 
    2  5  3  4 NA NA  4  5 `
    
        2
  •  48
  •   Marek    16 年前

    a[sapply(a, is.null)] <- NA
    unlist(a)
    # p1 p2 p1 p2 p1 p2 p1 p2 
    #  2  5  3  4 NA NA  4  5
    
        3
  •  1
  •   elmaroto10    9 年前

    如果您正在处理一个具有多个级别的长而复杂的JSON,您应该尝试一下:

    #### Player game logs URL: one record per player per game played ####
    gameLogsURL <- paste("http://stats.nba.com/stats/leaguegamelog?Counter=1000&Direction=DESC&LeagueID=00&PlayerOrTeam=P&Season=2016-17&SeasonType=Regular+Season&Sorter=PTS")
    
    #### Import game logs data from JSON ####
    # use jsonlite::fromJSON to handle NULL values
    gameLogsData <- jsonlite::fromJSON(gameLogsURL, simplifyDataFrame = TRUE)
    # Save into a data frame and add column names
    gameLogs <- data.frame(gameLogsData$resultSets$rowSet)
    colnames(gameLogs) <- gameLogsData$resultSets$headers[[1]]
    
        4
  •  -2
  •   Yorgos    16 年前

    指示缺少值的正确方法是NA(不是NULL)。下面是另一个有效的版本:

       a = c(list("p1"=2, "p2"=5),
          list("p1"=3, "p2"=4),
          list("p1"=NA, "p2"=NA),
          list("p1"=4, "p2"=5))
      unlist(a)
    
    p1 p2 p1 p2 p1 p2 p1 p2 
     2  5  3  4 NA NA  4  5 
    
    推荐文章