将包含多个数据的行写入csv r

时间:2018-08-14 11:10:50

标签: r csv

所以我的数据框看起来像这样

> df
 file_name        some_value               
 test.csv         12815415,5712365,12815383,13700109,12806007 

 write.csv(df,file="E:/output.csv",row.names = F)

生成的csv表如下所示

file_name        some_value   
test.csv         1.281545E+38

似乎只有some_value中的第一个条目被写入了csv,但是E + 38是从哪里来的呢?有什么建议可以解决此问题,以便在some_value列下有5个条目?

> dput(df)
structure(list(file_name = structure(1L, .Label = "test.csv", class = 
"factor"), 
some_value = structure(1L, .Label = 
"12815415,5712365,12815383,13700109,12806007", class = "factor")), .Names = 
c("file_name", 
"some_value"), row.names = c(NA, -1L), class = "data.frame")

3 个答案:

答案 0 :(得分:2)

要解决此问题,您可以使用单引号将该字段开头。

df$some_value <- paste0("'",df$some_value) #Add a single quote to the beginning to indicate to Excel that it is a text field

请注意,E + 38实际上是Excel问题,而不是R问题。似乎出现了E + 38,因为逗号分隔的值在csv文件的单个字段中输入。如果您在Excel中打开此代码,则Excel会将其视为逗号格式化的单个数字(例如,将几千个分隔成几百个),因此科学计数法中的数字为38个零。如果您在文本编辑器中打开csv文件,我认为它不会像这样。

如果我在记事本++中查看文件(不带撇号) 我看到File in text editor with all numbers and commas

如果我在Excel中查看相同的文件,则会看到:enter image description here Excel已将some_value解释为单个数字,并将逗号解释为格式,并以科学计数法显示该数字。

Excel可以通过在数字前加一个单引号来强制将值视为文本。

答案 1 :(得分:0)

只需使用至少一个字符作为some_values的第一个元素 例如s12815415,5712365,12815383,13700109,12806007。然后导出时将some_values视为文本并提取整个字符串

答案 2 :(得分:0)

由于MS excel的默认视觉属性(在Windows中),您正在获得这种价值。在记事本中打开.CSV文件(右键单击并用记事本打开),以获取准确的输出。