У меня есть тип строковой переменной в моем фрейме данных, который имеет длинную строку (это ответ JSON) с именами столбцов, которые я хочу, и значениями, следующими за ним.
Мой фрейм данных выглядит так:
| Участник | Ответы |
|---|---|
| Эмили | {"participantAge":"40","participantEducation":"Бакалавриат"} |
| Дуг | {"participantAge":"35","participantEducation":"Бакалавриат"} |
Так, например, цель состоит в том, чтобы иметь столбец возраст участника со значениями в качестве записей и участникОбразование в качестве столбца с записями.
| Участник | Ответы | возраст участника | участникОбразование |
|---|---|---|---|
| Эмили | {"} | 40 | Бакалавры |
| Дуг | {"} | 35 | Бакалавры |
Я мог сделать это раньше с помощью python, преобразовав ответ JSON в словари, но я не уверен, как реализовать это в R.
о нет я не сделал! это решение сработало чудесно, спасибо!





Вы можете сделать это следующим образом, используя dplyr и jsonlite
library(dplyr)
library(jsonlite)
df %>%
rowwise() %>%
mutate(Response = list(parse_json(Response))) %>%
unnest_wider(Response)
Выход:
Participant participantAge participantEducation
<chr> <chr> <chr>
1 Emily 35 Bachelors
2 Doug 40 Bachelors
Вход:
df = structure(list(Participant = c("Emily", "Doug"), Response = c("{\"participantAge\":\"35\",\"participantEducation\":\"Bachelors\"}",
"{\"participantAge\":\"40\",\"participantEducation\":\"Bachelors\"}"
)), class = "data.frame", row.names = c(NA, -2L))
Вы можете попробовать пакет jsonlite:
library("jsonlite")
dat_df <- data.frame(Emily='{"participantAge":"40","participantEducation":"Bachelors"}',
Doug='{"participantAge":"35","participantEducation":"Bachelors"}')
fromJSON_rec <- apply(dat_df, 2, fromJSON)
new_df <- data.frame(matrix(NA, nrow=2, ncol=3))
colnames(new_df) <- c("Participant", "participantAge", "participantEducation")
for(i in 1:length(fromJSON_rec)){
new_df[i,] <- c(names(fromJSON_rec)[i],
fromJSON_rec[[names(fromJSON_rec)[i]]][["participantAge"]],
fromJSON_rec[[names(fromJSON_rec)[i]]][["participantEducation"]])
}
> dat_df
Emily Doug
1 {"participantAge":"40","participantEducation":"Bachelors"} {"participantAge":"35","participantEducation":"Bachelors"}
> new_df
Participant participantAge participantEducation
1 Emily 40 Bachelors
2 Doug 35 Bachelors
Вам нужен столбец «Ответ» с
{"}в нем? Я не включил это ниже, но могу сделать это, если вам это нужно.