Как заменить все значения NULL во фрейме данных, составленном из списков? - PullRequest
0 голосов
/ 02 марта 2019

У меня есть фрейм данных (включая списки, а не факторы), сделанные из сотен файлов JSON.Мне нужно заменить все значения NULL на 0.Как я могу этого достичь?

Это мой сценарий для чтения файлов JSON 100 с в файл данных 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, но 3-й JSON-файл не имеет столбца с именем column_x.Поэтому при чтении файлов мой сценарий создает значения NULL в случае несовместимых имен столбцов в файлах JSON ... Я хочу изменить такие значения 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 голосов
/ 05 марта 2019

Наконец, я нашел свое решение относительно того, как заменить все значения NULL во фрейме данных, включающем списки.

A - мой фрейм данных, а col1 - один из столбцов (определяется как список)

for(i in 1:length(A$col1))if(is.null(A$col1[[i]]))A$col1[i] = 0 
0 голосов
/ 02 марта 2019

Попробуйте изменить NULL на NA, поскольку NULL обычно относится к чему-то несуществующему, а не к отсутствующему значению (надеюсь, это все еще точно, даже если это с 2010 года: https://www.r -bloggers.com/r-na-vs-null/).

Сначала настройте data.frame в соответствии с предложением @PoGibas.

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...