首页 > 解决方案 > 在 df 中读取并附加来自 paste(x, collapse=";") 的项目后丢失数据

问题描述

在脚本结束时,我将许多结果保存到单行向量中,并将其附加到 csv 文件中。结果之一是一个单元格字符串,其中包含用分号“;”折叠的预测值。当某些预测值为负数(我认为)时,这开始遇到困难,当发生这种情况时,它根本无法包含所有预测值。当第一个值为负时,它似乎更频繁地发生。

有了这个样本数据,我每次都会在第 15 或第 16 个值附近发生这种情况。

#create a blank csv
write.csv(x= data.frame(year=NA, location=NA, side=NA, bias=NA, test_predicted=NA, observed=NA, adj_r2=NA)[-1,], file="Results/my_save_file.csv", row.names = FALSE)

#do this a more than a thousand times
for(i in c(5:1005)){
#dummy data
set.seed(45+i)
test_predic_data <- data.frame(testset=c(1:4), observed=rnorm(mean=8,sd=2,n=80), test_predicted=rnorm(mean=8, sd=10,n=80))
year<-(2016 + i)
location <- "outdoors"
side<-"left"
bias<-0.00658
adj_r2<-0.21

#make negative the begining observation
test_predic_data[1,3] <- test_predic_data[1,3]*-1

#compile results
result_line<-paste(year, 
                   location,
                   side,
                   bias,
                   paste0(test_predic_data$test_predicted, collapse=";"),
                   paste0(test_predic_data$observed, collapse=";"),
                   adj_r2, 
                   sep=",")
#then I save the result line (to my already created csv) by appending it to the #bottom:
write(result_line,file="Results/my_save_file.csv",append=TRUE)
}

更新:使用我的真实数据集,我可以通过在 Excel(或下面的 R 代码)中打开 csv 来检查错误,并将单元格从文本转换为数据,原因很奇怪,它只有一些预测值。两天前,此示例数据向我抛出了错误,并且示例数据中没有 NA。但是今天我没有收到示例数据的错误。也许我不知道如何重现问题。我在 Windows 10 上运行 R 3.4.4。

多次写行后检查R中的问题......

#read in file
my_save_file_df <- read.csv(file="Results/my_save_file.csv")
library(tidyverse)

#split the results
split_results <-my_save_file_df %>% 
  select(., year, observed, test_predicted) %>%
  mutate(observed = strsplit(as.character(observed), ";")) %>%
  mutate(test_predicted = strsplit(as.character(test_predicted), ";")) %>%
  unnest(.)

出现问题时会弹出此错误消息

Error: All nested columns must have the same number of elements.
Call `rlang::last_error()` to see a backtrace

paste0() 可以使用的项目数量是否有字符限制?我是否内存不足,向量或 write.table() 是否对单个单元格中折叠的项目/字符有限制?

标签: rpaste

解决方案


推荐阅读