r - 对嵌套列表中的 NULL 元素应用替换函数
问题描述
我正在从公寓租赁平台的 rest api 中抓取 json。
假设我有以下数据结构,它传达了单个建筑物中每个出租单元的平方英尺:
sqft1 <- list(c("1500"),
NULL,
c("1300"))
我保留这些数据的维度很重要。如果我尝试与其他出租单元属性一起取消列出并聚合到数据框中,我将丢失第二个元素并引发错误。
但是通过在列表中找到具有 NULL 元素的索引,我可以将它们替换为包含空字符串的字符向量,如下所示:
isNull1 <- lapply(1:length(sqft1), function(x) is.null(sqft1[[x]]))
sqft1[unlist(isNull1)] <- c("")
当我尝试对多个建筑物的结果集应用相同的替换函数时,我的问题就出现了。运行以下块后,不会进行任何替换。
sqft3 <- list(list(c("1500"),
NULL,
c("1300")),
list(c("1400"),
c("1700")),
list(NULL,
c("1200")))
isNull3 <- lapply(1:length(sqft3), function(x) lapply(1:length(sqft3[[x]]), function(y) is.null(sqft3[[x]][[y]])))
lapply(1:length(sqft3), function(x) sqft3[[x]][unlist(isNull3[[x]])] <- c(""))
我在这里误解了关于应用功能的什么概念?任何想法如何使它工作?
谢谢!
解决方案
一种选择是使用map
函数两次:
map(sqft3,function(x){
map(x, function(y){
y[is.null(y)] <- ""
y
})})
# [[1]]
# [[1]][[1]]
# [1] "1500"
#
# [[1]][[2]]
# [1] ""
#
# [[1]][[3]]
# [1] "1300"
#
#
# [[2]]
# [[2]][[1]]
# [1] "1400"
#
# [[2]][[2]]
# [1] "1700"
#
#
# [[3]]
# [[3]][[1]]
# [1] ""
#
# [[3]][[2]]
# [1] "1200"
数据:
sqft3 <- list(list(c("1500"),
NULL,
c("1300")),
list(c("1400"),
c("1700")),
list(NULL,
c("1200")))
sqft3
# [[1]]
# [[1]][[1]]
# [1] "1500"
#
# [[1]][[2]]
# NULL
#
# [[1]][[3]]
# [1] "1300"
#
#
# [[2]]
# [[2]][[1]]
# [1] "1400"
#
# [[2]][[2]]
# [1] "1700"
#
#
# [[3]]
# [[3]][[1]]
# NULL
#
# [[3]][[2]]
# [1] "1200"
推荐阅读
- python - Tkinter - 在函数中存储文件夹目录并调用它来更改目录
- android - Can I put Drawable id in string.xml?
- c++ - Option to print output to screen or given file name (c++)
- javascript - Get page load time in angular
- python - 将熊猫数据框上传到谷歌电子表格
- java - Android Java How to Share Images from Uri (retrived from Firebase)without save the image
- r - Split data frame by conditional interval
- amazon-web-services - AWS ElasticSearch Logstash 403 Forbidden Access
- r - How do i use R to input a number of grouping values and recieve an output of observations in a 8x6 grid?
- matlab - Tiff format in Matlab