如果此前已有类似问题,我向大家道歉,但我在网上或其他地方找不到示例。
我有一个极其混乱的文本文件(可能是JSON格式),我想在R中分析数据。由于我对该语言仍然很陌生,因此我想读取原始数据并根据需要进行操作。
我该如何从我的计算机上的文本文件中读取JSON?此外,如果它不是JSON,我应该如何将原始数据读入(不解析成列等),以便可以继续了解如何解析它?
提前感谢!
如果此前已有类似问题,我向大家道歉,但我在网上或其他地方找不到示例。
我有一个极其混乱的文本文件(可能是JSON格式),我想在R中分析数据。由于我对该语言仍然很陌生,因此我想读取原始数据并根据需要进行操作。
我该如何从我的计算机上的文本文件中读取JSON?此外,如果它不是JSON,我应该如何将原始数据读入(不解析成列等),以便可以继续了解如何解析它?
提前感谢!
install.packages("jsonlite")
每当安装好软件包后,您就可以使用函数库进行加载。
library(jsonlite)
通常,每行分隔的JSON文件中每行都有一个对象。因此,您需要逐行阅读并收集这些对象。例如:
con <- file('myBigJsonFile.json')
open(con)
objects <- list()
index <- 1
while (length(line <- readLines(con, n = 1, warn = FALSE)) > 0) {
objects[[index]] <- fromJSON(line)
index <- index + 1
}
close(con)
此后,您将在objects变量中拥有所有数据。使用该变量,您可以提取所需信息。
scan()
或readLines()
。它们似乎做同样的事情,但它们之间有一个重要的区别。
scan()
允许您定义要查找的对象类型、数量等。请阅读帮助文件以获取更多信息。您可以使用scan来将每个单词/数字/符号作为向量的元素进行读取,例如:scan(filename,"")
。您还可以使用特定的分隔符来分隔数据。请参阅帮助文件中的示例。readLines(filename)
或scan(filename,"",sep="\n")
。它会将文件的每一行作为元素给出一个向量。这再次允许您对文本进行自定义处理。不过,如果您真的经常这样做,您可能需要考虑在Perl中完成这个任务。