Вручную создайте тот же фрейм данных, полученный из функции JSON - PullRequest
1 голос
/ 17 февраля 2020

У меня есть строка JSON, которая возвращает фрейм данных с использованием пакета jsonlite.

 library(jsonlite)
 d  <- fromJSON('[{"x":"A","value":100},{"x":"B","value":100},{"x":["A","B"],"value":20}]' )

это дает мне

     x value
1    A   100
2    B   100
3 A, B    20

Но я хочу заново создать тот же фрейм данных вручную , Класс столбца x является списком.

Моя попытка выглядит следующим образом:

   data.frame(x = c("A","B",list(c("A","B"))),value = c(100,100,20))

Это дает мне ошибку , отличающуюся нет. рядов

1 Ответ

1 голос
/ 17 февраля 2020

Мы можем обернуть с I на list в base R

d1 <- data.frame(x = I(list("A", "B", c("A", "B"))), value = c(100, 100, 20))
d1
#      x value
#1    A   100
#2    B   100
#3 A, B    20

Это добавило бы attribute для "AsIs",

attr(d1$x, "class")
#[1] "AsIs"

, но это те же самые данные, игнорируя атрибуты

all.equal(d1, d, check.attributes = FALSE)
#[1] TRUE

Или если мы присвоим атрибут NULL, это будет то же самое

attr(d1$x, "class") <- NULL
all.equal(d1, d)
#[1] TRUE

, и если мы используем tibble, прямее `

library(tibble)
tibble(x = list("A", "B", c("A", "B")), value = c(100, 100, 20))
...