我有由数百个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
答案 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