R write dataframe column to csv有前导零

mzillmmw  于 2023-05-11  发布在  其他
关注(0)|答案(7)|浏览(142)

我有一个存储不同长度前缀的表。表片段(ClusterTable)
ClusterTable[ClusterTable$FeatureIndex ==“Prefix2”,'FeatureIndex ',' FeatureValue')]

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)等。谢谢

gmol1639

gmol16391#

编辑:截至2021年8月5日再次测试,查找和替换方法不再起作用。:(使用“flash fill”的解决方法

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

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

当您在excel中打开输出时,撇号将告诉excel保留所有字符,而不是删除前导零。

  • 较新的Excel版本:*

由于查找和替换确实会删除撇号和0(在较新的Excel版本中),另一种方法是添加一列并使用“快速填充”添加没有撇号的值。如果单元格中的值格式不同(例如在一些单元格中存在多于一个的数字),则“快速填充”的结果应当被双重检查,并且如果需要的话应当被调整。然后可以删除前一列。

  • 较旧的Excel版本:*

此时,您可以将列格式化为“文本”,然后执行查找和替换以删除撇号(可能为此创建一个宏)。

1u4esq0p

1u4esq0p2#

如果你只是需要它的视觉效果,只需要在你写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中是隐藏的。

wribegjk

wribegjk3#

将文件另存为csv文件,但扩展名为txt。然后使用read.tablesep=","读取它:

write.csv(ClusterTable,file="My_Clusters.txt")
read.table(file=My_Clusters.txt, sep=",")
pgpifvop

pgpifvop4#

如果您尝试使用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")
6ovsh4lw

6ovsh4lw5#

这几乎是从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')
eoxn13cs

eoxn13cs6#

您必须使用format修改列:

format(your_data$your_column, trim = F)

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

xfb7svmp

xfb7svmp7#

在处理前导零时,如果导出到excel,则需要谨慎。Excel有一种超越自我的倾向,会自动删除前导零。你的代码是好的,否则在任何其他文本编辑器中打开文件应该显示零。

相关问题