Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 使用嵌套JSON转换列_R_Function_Dataframe - Fatal编程技术网

R 使用嵌套JSON转换列

R 使用嵌套JSON转换列,r,function,dataframe,R,Function,Dataframe,我有一个名为df的数据帧: ID Message 1 {"user":user10, "message":{"sender":"k3532", "card":87876}} 2 {"user":user14, "message":{"sender":"hg769", "card"

我有一个名为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"
))
我想在列消息中解析这些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”是列。现在我想对每一行中的每个json都这样做,并与原始数据帧绑定。因此,预期结果必须如下所示:

user      message.sender  message.card
user10      k3532            87876
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   

如何编写该函数?

如果解决方案必须使用您当前的方法,您可以使用它准备函数:

get_data <- function(message) {
  df_col <- message %>% jsonlite::fromJSON
  df_col <- tibble::enframe(unlist(df_col))
  df_col <- setNames(data.frame(as.list(df_col$value)), df_col$name)
  df_col
}
对于所有的
消息
值,您可以使用
purrr::map\u dfr

purrr::map_dfr(df$Message, get_data)

#    user message.sender message.card message.allowed
#1 user10          k3532        87876            <NA>
#2 user14          hg769   6434363654            <NA>
#3 user22         gjhyj5     87676876            TRUE
purrr::map\u dfr(df$消息,获取数据)
#允许用户message.sender message.card message.allowed
#1用户10 K3532876
#2用户14 hg769 64343654
#3用户22 gjhyj5 87676876正确

@RonakShah它的不同原因是它关于绑定数据帧,而不是解析。在这里,我已经提供了用于解析的代码(不是以提供的方式),问题是如何将解析得到的数据帧与原始数据绑定在一起frame@RonakShah解决方案必须包含以下代码
df_col%fromJSON()df_col
purrr::map_dfr(df$Message, get_data)

#    user message.sender message.card message.allowed
#1 user10          k3532        87876            <NA>
#2 user14          hg769   6434363654            <NA>
#3 user22         gjhyj5     87676876            TRUE