我有多个包含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”循环代码:
应用于我的问题它看起来应该是这样的:
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
答案 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
在数据帧的行或列上应用函数。这不是你的情况,因为你循环一个字符向量来获取在其他地方使用的文件名。