R将dataframe列写入具有前导零的csv

时间:2015-02-23 13:49:34

标签: r csv export-to-csv

我有一个存储不同长度前缀的表。 表格的片段(ClusterTable)

  

ClusterTable [ClusterTable $ FeatureIndex ==" Prefix2",' FeatureIndex',   ' FeatureValue&#39)]

   FeatureIndex FeatureValue
80      Prefix2           80
81      Prefix2           81
30      Prefix2           30
70      Prefix2           70
51      Prefix2           51
84      Prefix2           84
01      Prefix2           01
63      Prefix2           63
28      Prefix2           28
26      Prefix2           26
65      Prefix2           65
75      Prefix2           75

我使用以下内容写入csv文件:

write.csv(ClusterTable, file = "My_Clusters.csv")

特征值01失去前导零。

我首先尝试将列转换为字符

ClusterTable$FeatureValue <- as.character(ClusterTable$FeatureValue)

并尝试将其附加到空字符串,以便在写入文件之前将其转换为字符串。

ClusterTable$FeatureValue <- paste("",ClusterTable$FeatureValue)

另外,我在这个表中有各种长度的前缀,所以我不能使用固定长度的简单格式说明符。即该表还具有值001(前缀3),0001(前缀4)等。 感谢

7 个答案:

答案 0 :(得分:3)

在处理前导零时,如果导出为ex​​cel,则需要谨慎。 Excel倾向于超越自己并自动修剪前导零。您的代码很好,否则在任何其他文本编辑器中打开文件应显示零。

答案 1 :(得分:3)

我知道这是一个老问题,但是当我在excel中打开.csv输出时,我遇到了一个保持前导零的解决方案。在R中编写.csv之前,在每个值的前面添加一个撇号,如下所示:

vector <- sapply(vector, function(x) paste0("'", x))

当您在excel中打开输出时,撇号将告诉excel保留所有字符而不会丢弃前导零。此时,您可以将列格式化为&#34; text&#34;然后执行查找和替换以删除撇号(可能为此创建一个宏)。

答案 2 :(得分:1)

将文件另存为csv文件,但扩展名为txt。然后使用sep=","write.csv(ClusterTable,file="My_Clusters.txt") read.table(file=My_Clusters.txt, sep=",")

一起阅读
import * as _angular_ from 'angular';

declare global {
  const angular: typeof _angular_;
}

答案 3 :(得分:0)

如果您只是需要视觉效果,只需在编写csv文件之前添加一行,如下:

ClusterTable <- read.table(text="   FeatureIndex FeatureValue
80      Prefix2           80
           81      Prefix2           81
           30      Prefix2           30
           70      Prefix2           70
           51      Prefix2           51
           84      Prefix2           84
           01      Prefix2           01
           63      Prefix2           63
           28      Prefix2           28
           26      Prefix2           26
           65      Prefix2           65
           75      Prefix2           75",
                           colClasses=c("character","character"))

ClusterTable$FeatureValue <- paste0(ClusterTable$FeatureValue,"\t")

write.csv(ClusterTable,file="My_Clusters.csv")

它在值的末尾添加了一个字符,但它隐藏在Excel中。

答案 4 :(得分:0)

如果您尝试使用Excel打开.csv,我建议您写入excel。首先,你必须填充数据。

    library(openxlsx)
    library(dplyr)

    ClusterTable <- ClusterTable %>% 
     mutate(FeatureValue = as.character(FeatureValue),
     FeatureValue = str_pad(FeatureValue, 2, 'left', '0'))

    write.xlsx(ClusterTable, "Filename.xlsx")

答案 5 :(得分:0)

这几乎是从R导出时可以采用的方法。这取决于要导出的数据类型和记录数(数据大小):

  • 如果您有很多行(例如成千上万),txt是最佳路线,则可以导出到csv,前提是您知道数据中没有开头或结尾的零,使用txtxlsx格式。导出到csv很有可能会删除零。

  • 如果您不处理很多行,那么xlsx库会更好

  • xlsx库可能取决于java,因此请确保使用不需要的库

  • xlsx库在处理许多行时是有问题的还是速度较慢,因此txtcsv仍然是更好的方法

对于您的特定问题,看来您不需要处理大量的行,因此可以使用:

library(openxlsx)

# read data from an Excel file or Workbook object into a data.frame
df <- read.xlsx('name-of-your-excel-file.xlsx')

# for writing a data.frame or list of data.frames to an xlsx file
write.xlsx(df, 'name-of-your-excel-file.xlsx')

答案 6 :(得分:-1)

您必须使用format修改您的列:

format(your_data$your_column, trim = F)

因此,当您导出到.csv时,前导零将继续存在。