r - 如何将字符串转换为R中的嵌套列表?
问题描述
我有一个数据框,列中有嵌套列表。由于它是从 csv 读取的,因此列被格式化为字符。
用于复制的虚拟数据:
col1 <- c("list1",
"list2",
"emptylist",
"list3")
col2 <-c("[{'test': 1, 'test2': 2, 'test3': 'string'}, {'test': 1, 'test2': 2, 'test3': 'string2'}]",
"[{'test3': 5, 'test4': 6, 'test5': 'string3'}, {'test': 7, 'test6': 8, 'test7': 'string4'}]",
"",
"[{'test9': 9, 'test10': 10, 'test11': 'string11'}, {'test12': 12, 'test13': 13, 'test14': 'string14'}]")
mydf <- data.frame(col1, col2)
为了使用类似的东西mydf %>% dplyr::unnest(col2)
,我首先需要将列从字符格式化为列表。这是否可能,如果没有,可以使用什么替代解决方案?
解决方案
fromJSON
使用from可能更容易jsonlite
library(jsonlite)
lapply(gsub("'", '"', mydf$col2), fromJSON)
[[1]]
test test2 test3
1 1 2 string
2 1 2 string2
[[2]]
test3 test4 test5 test test6 test7
1 5 6 string3 NA NA <NA>
2 NA NA <NA> 7 8 string4
使用新数据集,只需将不为空的数据集子集为!=
ornzchar
i1 <- nzchar(mydf$col2)
mydf$col3[i1] <- lapply(gsub("'", '"', mydf$col2[i1]), fromJSON)
-输出
> mydf$col3
[[1]]
test test2 test3
1 1 2 string
2 1 2 string2
[[2]]
test3 test4 test5 test test6 test7
1 5 6 string3 NA NA <NA>
2 NA NA <NA> 7 8 string4
[[3]]
NULL
[[4]]
test9 test10 test11 test12 test13 test14
1 9 10 string11 NA NA <NA>
2 NA NA <NA> 12 13 string14
推荐阅读
- r - 我可以从函数参数创建值名称,并为其分配函数输出吗?
- django - 如何在 django 模型中打印字段的字段类型
- node.js - 转换为数值失败 - GraphQL
- oracle - 包级别变量存储在 oracle 中的什么位置?有桌子吗?
- javascript - WebDriverError:元素点击被拦截:其他元素将接收点击 - 检测
- node.js - Node.js 应用程序未通过 nginx 反向代理打开(不同端口上的多个应用程序)
- selenium-webdriver - 使用代理自动到 Instagram 注册页面
- laravel - 在 hasMany-relationship 上限制为 1
- python - 是否有任何功能可以帮助我在 PySpark 中转换日期和字符串格式
- javascript - 如何获取作为对象数组一部分的输入的当前值?