我正在尝试提取一些网络数据并将其放入数据框中以供将来使用。某些列中的某些值为NA;我希望那些细胞有NA或一些文字。这是我正在使用的for循环:
extra <- as.data.frame(matrix(NA, nrow = length(main.node), ncol = 2))
for (i in 1:length(main.node)){
extra[i,1] <- main.node[[i]]$data$author
extra[i,2] <- main.node[[i]]$data$author_flair_text
}
问题是author_flair_text
的某些值不存在(作者列工作正常)。例如,打电话
main.node[[4]]$data$author_flair_text
返回NULL
。
我收到了错误
Error in `[<-.data.frame`(`*tmp*`, i, 2, value = NULL) :
replacement has length zero
基本上,我需要for循环来填充缺少的信息。有没有办法在for循环中将NULL转换为“NULL”?
如果这有帮助,这里是main.node
的来源:
raw_data = tryCatch(RJSONIO::fromJSON(readLines(URL, warn = FALSE)),
error = function(e) NULL)
main.node = raw_data[[2]]$data$children
谢谢!
答案 0 :(得分:1)
试试这个。警告我没有运行它,我只是写它所以可能有一个错字:
extra <- as.data.frame(matrix(NA, nrow = length(main.node), ncol = 2))
for (i in 1:length(main.node)){
extra[i,1] <- main.node[[i]]$data$author
temp <- main.node[[i]]$data$author_flair_text
if(is.null(temp)){
temp <- "NULL"
}
extra[i,2] <- temp
}
答案 1 :(得分:1)
您可以在此处使用ifelse()
构造。它有test
参数(对于条件),yes
参数(如果test为true则为值)和no
参数(如果测试为false则为值)。 / p>
在您的情况下,它看起来像这样:
temp <- main.node[[i]]$data$author_flair_text
extra[i,2] <- ifelse(is.null(temp), "your_null_indicator", temp)