R将数据帧列写入具有前导零的csv

R将数据帧列写入具有前导零的csv,r,csv,export-to-csv,R,Csv,Export To Csv,我有一个存储不同长度前缀的表。。 表的片段(ClusterTable) ClusterTable[ClusterTable$FeatureIndex==“Prefix2”、“FeatureIndex”, “FeatureValue”)] 我使用以下命令写入csv文件: write.csv(ClusterTable, file = "My_Clusters.csv") 特征值01在前导零处丢失 我首先尝试将列转换为字符 ClusterTable$FeatureValue <- as.cha

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

ClusterTable[ClusterTable$FeatureIndex==“Prefix2”、“FeatureIndex”, “FeatureValue”)]

我使用以下命令写入csv文件:

write.csv(ClusterTable, file = "My_Clusters.csv")
特征值01在前导零处丢失

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

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

ClusterTable$FeatureValue在处理前导零时,如果导出到excel,则需要小心。Excel有一种比自己更聪明的倾向,会自动删除前导零。否则代码就可以了,在任何其他文本编辑器中打开文件都会显示零。

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

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

vector如果只是为了视觉效果,只需在编写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")

ClusterTable将文件另存为csv文件,但扩展名为txt。然后使用
read.table
sep=“,”
)读取它:


如果您试图用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")
库(openxlsx)
图书馆(dplyr)
可聚类%
变异(FeatureValue=as.character(FeatureValue),
FeatureValue=str_焊盘(FeatureValue,2,'左','0'))
write.xlsx(ClusterTable,“Filename.xlsx”)

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

  • 如果您有许多行,例如数千行,
    txt
    是最佳路径,您可以导出到
    csv
    如果您知道数据中没有前导或尾随零,则可以使用
    txt
    xlsx
    格式。导出到
    csv
    很可能会删除零

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

  • xlsx
    库可能依赖于
    java
    ,因此请确保使用不需要它的库

  • xlsx
    库在处理许多行时要么有问题,要么速度慢,因此仍然
    txt
    csv
    可能是更好的方法

对于您的特定问题,您似乎没有处理大量行,因此可以使用:

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')
库(openxlsx)
#将Excel文件或工作簿对象中的数据读取到data.frame中

df您必须使用
格式修改列:

format(your_data$your_column, trim = F)

因此,当您导出到.csv时,前导零将保持不变。

我找到了相关问题,但这是用于阅读的,并且已修复了纵向问题。它究竟何时会丢失“0”?我试着用R写并打开“01”(作为字符),效果很好。在我的csv文件中,用任何文本编辑器打开它也可以正常工作。我使用这个csv文件作为另一个程序的源。如果我打开并签入csv,则没有前导zeros@karx,是否在excel中打开csv?我认为excel可能会变得聪明,自动删除前导零。@cdeterman你不知道我有多傻。非常感谢。在我的文本编辑器和wollah中查看它!每次将csv输入下一个预编程之前,我都会手动检查csv。只是想确定一下。谁知道过分谨慎会伤害你呢?这不是答案,不应该被标记为回答问题。杰弗的回答正确地回答了这个问题,而不是这个问题
    library(openxlsx)
    library(dplyr)

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

    write.xlsx(ClusterTable, "Filename.xlsx")
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')
format(your_data$your_column, trim = F)