如何在 R 中解析 json 个对象(保存为 csv)
How to parse json objects (saved as csv) in R
到目前为止,我有这个:
file responses
file1.csv {"Q0":2, "Q1":2, "Q2":2, "Q3":2, .... "Q15":2}
file2.csv {"Q0":2, "Q1":2, "Q2":2, "Q3":2, .... "Q15":2}
但是每个文件的全部数据只有一个单元格。
我想要这个:
Item responses file
Q0 2 file1.csv
Q1 2 file1.csv
Q2 2 file1.csv
...
Q15 2 file1.csv
Q0 2 file2.csv
Q1 2 file2.csv
Q2 2 file2.csv
...
Q15 2 file2.csv
非常感谢!
1) 读取每个文件并将其从 JSON 格式转换为所需的格式。最后使用 rbind
.
组合每一个
# create test data
cat('{"Q0":1, "Q1":2, "Q2":3, "Q3":4, "Q15":5}\n', file = "file1.csv")
cat('{"Q0":11, "Q1":12, "Q2":13, "Q3":14, "Q15":15}\n', file = "file2.csv")
Files <- c("file1.csv", "file2.csv")
library(rjson)
m <- do.call("rbind", lapply(Files, function(f) {
x <- fromJSON(file = f)
cbind(Item = names(x), responses = unname(unlist(x)), file = f)
}))
给出这个字符矩阵:
> m
Item responses file
[1,] "Q0" "1" "file1.csv"
[2,] "Q1" "2" "file1.csv"
[3,] "Q2" "3" "file1.csv"
[4,] "Q3" "4" "file1.csv"
[5,] "Q15" "5" "file1.csv"
[6,] "Q0" "11" "file2.csv"
[7,] "Q1" "12" "file2.csv"
[8,] "Q2" "13" "file2.csv"
[9,] "Q3" "14" "file2.csv"
[10,] "Q15" "15" "file2.csv"
2) 如果你的意思是你的起点不是文件本身而是一个数据框 DF
with file
and responses
列然后:
# form input data frame -- this is the two columns shown in the question
DF <- data.frame(file = Files, responses = sapply(Files, readLines))
dd <- do.call("rbind", by(DF, DF$file, function(d) {
f <- as.character(d$file)
x <- fromJSON(json_str = as.character(d$responses))
data.frame(Item = names(x), responses = unname(unlist(x)), file = f,
stringsAsFactors = FALSE)
}))
rownames(dd) <- NULL
给这个数据框:
> dd
Item responses file
1 Q0 1 file1.csv
2 Q1 2 file1.csv
3 Q2 3 file1.csv
4 Q3 4 file1.csv
5 Q15 5 file1.csv
6 Q0 11 file2.csv
7 Q1 12 file2.csv
8 Q2 13 file2.csv
9 Q3 14 file2.csv
10 Q15 15 file2.csv
到目前为止,我有这个:
file responses
file1.csv {"Q0":2, "Q1":2, "Q2":2, "Q3":2, .... "Q15":2}
file2.csv {"Q0":2, "Q1":2, "Q2":2, "Q3":2, .... "Q15":2}
但是每个文件的全部数据只有一个单元格。
我想要这个:
Item responses file
Q0 2 file1.csv
Q1 2 file1.csv
Q2 2 file1.csv
...
Q15 2 file1.csv
Q0 2 file2.csv
Q1 2 file2.csv
Q2 2 file2.csv
...
Q15 2 file2.csv
非常感谢!
1) 读取每个文件并将其从 JSON 格式转换为所需的格式。最后使用 rbind
.
# create test data
cat('{"Q0":1, "Q1":2, "Q2":3, "Q3":4, "Q15":5}\n', file = "file1.csv")
cat('{"Q0":11, "Q1":12, "Q2":13, "Q3":14, "Q15":15}\n', file = "file2.csv")
Files <- c("file1.csv", "file2.csv")
library(rjson)
m <- do.call("rbind", lapply(Files, function(f) {
x <- fromJSON(file = f)
cbind(Item = names(x), responses = unname(unlist(x)), file = f)
}))
给出这个字符矩阵:
> m
Item responses file
[1,] "Q0" "1" "file1.csv"
[2,] "Q1" "2" "file1.csv"
[3,] "Q2" "3" "file1.csv"
[4,] "Q3" "4" "file1.csv"
[5,] "Q15" "5" "file1.csv"
[6,] "Q0" "11" "file2.csv"
[7,] "Q1" "12" "file2.csv"
[8,] "Q2" "13" "file2.csv"
[9,] "Q3" "14" "file2.csv"
[10,] "Q15" "15" "file2.csv"
2) 如果你的意思是你的起点不是文件本身而是一个数据框 DF
with file
and responses
列然后:
# form input data frame -- this is the two columns shown in the question
DF <- data.frame(file = Files, responses = sapply(Files, readLines))
dd <- do.call("rbind", by(DF, DF$file, function(d) {
f <- as.character(d$file)
x <- fromJSON(json_str = as.character(d$responses))
data.frame(Item = names(x), responses = unname(unlist(x)), file = f,
stringsAsFactors = FALSE)
}))
rownames(dd) <- NULL
给这个数据框:
> dd
Item responses file
1 Q0 1 file1.csv
2 Q1 2 file1.csv
3 Q2 3 file1.csv
4 Q3 4 file1.csv
5 Q15 5 file1.csv
6 Q0 11 file2.csv
7 Q1 12 file2.csv
8 Q2 13 file2.csv
9 Q3 14 file2.csv
10 Q15 15 file2.csv