我不熟悉导入.json文件以便在R中使用。我正在尝试创建一个“长”格式的数据帧 - 每行是一个参与者,每列是一个变量。调用fromJSON后,我的大多数数据集都是兼容的,但是一个嵌套的json结构导致一个参差不齐的列表,每个参与者都有Null,1,2或3个条目(理论上可能会有更多)。
样品:
testdf <- fromJSON("[[\"MMM\",\"AAA\"],null,[\"GGG\",\"CCC\",\"NNN \"],null,null,[\"AAA\",\"NNN \"],null,[\"MMM\",\"AAA\"],null,null,null,null,[\"MMM\",\"AAA\"],[\"CCC\",\"AAA\"],\"NNN \",[\"MMM\",\"NNN \",\"EEE\"],null,null,[\"CCC\",\"MMM\",\"AAA\"],[\"HHH\",\"AAA\"],\"AAA\",[\"MMM\",\"AAA\",\"NNN \"],[\"CCC\",\"AAA\"],[\"MMM\",\"AAA\",\"NNN \"],[\"AAA\",\"NNN \"],[\"MMM\",\"AAA\"],null,null,null,null,null,null]", flatten=TRUE)
如何将此列表转换为保留空值的32 x n数据帧?
unlist上的变体删除空值; rbind.fill将条目移动到下一行,当然 - 像cbind.fill这样的工作吗? (cbind a df with an empty df (cbind.fill?)) 在plyr中隐藏的东西?
感谢您的任何建议。
答案 0 :(得分:0)
相当简单:
t(sapply(testdf, function(x) {
if (is.null(x)) x <- NA_character_
length(x) <- 3
x })
)
如果要自动选择列数,则需要先计算列数:
nc <- max(sapply(testdf, length))
t(sapply(testdf, function(x) {
if (is.null(x)) x <- NA_character_
length(x) <- nc
x })
)