【问题标题】:How to replace All NULL Values in Data Frame made of lists?如何替换由列表组成的数据框中的所有 NULL 值?
【发布时间】:2019-07-24 11:42:43
【问题描述】:

我有由 100 个 JSON 文件组成的数据框(包括列表而不是因素)。我需要用 0 替换所有 NULL 值。我怎样才能做到这一点?

这是我将 100 个 JSON 文件读入 R 数据框的脚本,大多数 JSON 文件有 20 列,很少有 18 列 [2 列不存在],所以在任何 JSON 文件中缺少列值的地方,默认情况下它为缺失的列创建 NULL 值。

path<-"mypath"
files <- dir(path, pattern = "*.json")

mydf <- files %>%
map_df(~fromJSON(file.path(path, .), flatten = TRUE))

看看下面的例子。前 2 个 JSON 文件具有 column_x 值,但第三个 JSON 文件没有任何具有 column_x 名称的列。因此,在读取文件时,我的脚本会在 JSON 文件中列名不一致的情况下创建 NULL 值......我想要的是在涉及列表的数据框中将此类 NULL 值更改为 0。

mydf[10]

   column_x
1  CSCvg17070
2  CSCvd08829
3  NULL

出于生产目的,我的示例 df 如下所示

mydf<-data.frame(col1=c(NULL,"b"),col2=c("f","j"))
mydf$col1<-as.list(mydf$col1)
mydf$col2<-as.list(mydf$col2)
str(mydf)

我尝试执行以下操作,但没有达到预期的效果。

mydf[is.null(mydf)] <- 0

【问题讨论】:

  • Yogesh,我认为您没有按照您的意图定义示例 data.frame? NULL 没有填充,只是 col1 中出现了两次“b”?
  • @Yogesh Kumar,将 NULL 更改为 NA,因此您的示例 data.frame 包含缺失值
  • @RussThomas:是的,Null 值没有填充我试过了,但是在我的原始数据框中我有 NULL 值,所以我尝试创建一个类似的数据框。我的数据框也涉及列表,因此发现很难将 NULL 作为值...。我已经用解释更新了我的查询
  • @ladylala :在我的原始数据框中,我有 NULL 而不是 NAs,请在我的问题中参考我更新的 cmets。

标签: r json list dataframe


【解决方案1】:

尝试将您的 NULL 更改为 NA,因为 NULL 通常指的是不存在的东西,而不是缺失值(希望这仍然是准确的,即使它来自 2010 年:https://www.r-bloggers.com/r-na-vs-null/)。

首先,按照@PoGibas 的建议调整您的data.frame

mydf<-data.frame(col1=c(NA,"b"),col2=c("f","j"))
mydf$col1<-as.list(mydf$col1)
mydf$col2<-as.list(mydf$col2)
str(mydf)

现在,您的原始命令(将 is.null() 更改为 is.na() 除外:

mydf[is.na(mydf)] <- 0
##   col1 col2
## 1    0    1
## 2    1    2

【讨论】:

  • 请参考我的 cmets ,当我将 JSON 文件作为数据框读取时,默认情况下我会在 mydf 中获得几列的 NULL 值,所以我想将这些 NULL 值更改为 0...我不能将 NULL 更改为 NA,因为在将 JSON 文件加载到 r 时,我有一个具有 NULL 值的数据
  • @YogeshKumar 很抱歉回复晚了。您介意用str(mydf) 的输出更新您的问题吗?我很难生成您的可重现示例,因为它似乎与您的描述不符。谢谢!
【解决方案2】:

最后,我找到了关于如何替换涉及列表的数据框中的所有 NULL 值的解决方案。

A 是我的数据框,col1 是列之一(定义为列表)

for(i in 1:length(A$col1))if(is.null(A$col1[[i]]))A$col1[i] = 0 

【讨论】:

    猜你喜欢
    • 2017-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-11
    • 1970-01-01
    相关资源
    最近更新 更多