【发布时间】:2020-08-20 08:52:10
【问题描述】:
我有一个名为 df 的数据框:
ID Message
1 {"user":user10, "message":{"sender":"k3532", "card":87876}}
2 {"user":user14, "message":{"sender":"hg769", "card":6434363654}}
3 {"user":user22, "message":{"sender":"gjhyj5", "card":87676876, "allowed":true}}
你可以通过它创建
df = structure(list(ID = 1:3, Message = c("{\"user\":\"user10\", \"message\":{\"sender\":\"k3532\", \"card\":87876}}",
"{\"user\":\"user14\", \"message\":{\"sender\":\"hg769\", \"card\":6434363654}}",
"{\"user\":\"user22\", \"message\":{\"sender\":\"gjhyj5\", \"card\":87676876, \"allowed\":true}}"
)), row.names = c(NA, -3L), class = c("data.frame"
))
我想解析 Message 列中的那些 json 并将它们转换为列。我使用第一行的 json 执行此操作:
df_col <- df[1,]$Message %>%
fromJSON()
df_col <- enframe(unlist(df_col))
df_col <- setNames(data.frame(as.list(df_col$value)), df_col$name)
我得到了数据框,它看起来像这样:
user message.sender message.card
user10 k3532 87876
其中“user”“message.sender”“message.card”是列。现在我想对每一行中的每个 json 执行此操作并与原始数据框绑定。所以,想要的结果必须是这样的:
ID name user message.sender message.card message.allowed
1 value user10 k3532 87876 NA
2 value user14 hg769 6434363654 NA
3 value user22 gjhyj5 87676876 TRUE
我该如何编写那个函数?
【问题讨论】:
-
@RonakShah 其不同的原因在于绑定数据帧,而不是解析。在这里,我已经提供了解析代码(不是以提供的方式),一个问题是关于将我从解析中获得的数据帧与原始数据帧绑定
-
@RonakShah,解决方案必须包含此代码
df_col <- df[1,]$Message %>% fromJSON() df_col <- enframe(unlist(df_col)) df_col <- setNames(data.frame(as.list(df_col$value)), df_col$name)。这很重要。我不问怎么解析,我问怎么绑定