在R中编辑多个JSON文件并将其保存为CSV(替代“for”循环)

时间:2018-02-21 14:53:53

标签: json r loops apply

我有多个包含Twitter推文的JSON文件。我想逐个导入和编辑它们。

对于单个文件,我的代码如下所示:

data <- fromJSON("filename.json")
data <- data[c(1:3,13,14)]
data$lang <- ifelse(data$lang!="de",NA,data$lang)
data <- na.omit(data)
write_as_csv(data,"filename.csv") 

现在我想将此代码应用于多个文件。我在这里找到了一个“for”循环代码:

Loop in R to read many files

应用于我的问题它看起来应该是这样的:

setwd("~/Documents/Elections")
ldf <- list()
listjson <- dir(pattern = "*.json")
for (k in 1:length(listjson)){
  data[k] <- fromJSON(listjson[k])
  data[k] <- data[k][c(1:3,13,14)]
  data[k]$lang <- ifelse(data[k]$lang!="de",NA,data[k]$lang)
  data[k] <- na.omit(data[k])
  filename <- paste(k, ".csv")
  write_as_csv(listjson[k],filename) 
}

但是循环中的第一行已经不起作用了。

> data[k] <- fromJSON(listjson[k])
Warning message:
In `[<-.data.frame`(`*tmp*`, k, value = list(createdAt =  c(1505935036000,  :
  provided 35 variables to replace 1 variables

我无法弄清楚原因。另外,我想知道是否有更好的方法来实现这个问题而不使用for循环。我读到了申请家庭,我只是不知道如何将它应用于我的问题。提前谢谢!

这是我的数据的示例: https://drive.google.com/file/d/19cRS6p_mHbO6XXprfvc6NPZWuf_zG7jr/view?usp=sharing

1 个答案:

答案 0 :(得分:0)

它应该像这样工作:

setwd("~/Documents/Elections")
listjson <- dir(pattern = "*.json")
for (k in 1:length(listjson)){
   # Load the JSON that correspond to the k element in your list of files
   data <- fromJSON(listjson[k]) 
   # Select relevant columns from the dataframe
   data <- data[,c(1:3,13,14)]
   # Manipulate data
   data$lang <- ifelse(data$lang!="de",NA,data$lang)
   data <- na.omit(data)

   filename <- paste(listjson[k], ".csv")
   write_as_csv(data,filename) 
}

对于问题的第二部分,apply在数据帧的行或列上应用函数。这不是你的情况,因为你循环一个字符向量来获取在其他地方使用的文件名。