如何替换列表组成的数据框中的所有NULL值?

时间:2019-03-02 18:20:54

标签: r json list dataframe

我有由数百个JSON文件构成的数据框(包括列表而不是因子)。我需要将所有NULL值替换为0。我该如何实现?

这是我的脚本,用于将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))

只看下面的例子。前两个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

2 个答案:

答案 0 :(得分:1)

请尝试将NULL更改为NA,因为NULL通常是指不存在的东西,而不是缺少的值(希望这仍然是准确的,即使它来自2010年:{ {3}}。

首先,按照@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

答案 1 :(得分:0)

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

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

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