R将数据帧列写入具有前导零的csv
R write dataframe column to csv having leading zeroes
我有一个 table 存储不同长度的前缀..
table(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)
此外,我在这个 table 中有各种长度的前缀,所以我不能使用固定长度的简单格式说明符。即 table 的值也为 001(Prefix3)、0001(Prefix4) 等。
谢谢
在处理前导零时,如果导出到 excel,则需要谨慎。 Excel 倾向于超越自己并自动 trim 前导零。否则你的代码很好,在任何其他文本编辑器中打开文件应该显示零。
编辑:截至 2021 年 8 月 5 日再次测试,这不再有效。 :(
我知道这是一个老问题,但我偶然发现了一个在 excel 中打开 .csv 输出时保持前导零的解决方案。在用 R 编写 .csv 之前,在每个值的前面添加一个撇号,如下所示:
vector <- sapply(vector, function(x) paste0("'", x))
当您在 excel 中打开输出时,撇号会告诉 excel 保留所有字符而不是删除前导零。此时您可以将该列格式化为“文本”,然后进行查找和替换以删除撇号(也许为此制作一个宏)。
如果只是为了视觉需要,只需要在写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 中。
将文件另存为 csv 文件,但扩展名为 txt。然后使用 read.table
和 sep=","
:
阅读它
write.csv(ClusterTable,file="My_Clusters.txt")
read.table(file=My_Clusters.txt, 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")
这几乎是您从 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')
您必须使用 format
:
修改您的列
format(your_data$your_column, trim = F)
因此,当您导出为 .csv 时,前导零将继续存在。
我有一个 table 存储不同长度的前缀.. table(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)
此外,我在这个 table 中有各种长度的前缀,所以我不能使用固定长度的简单格式说明符。即 table 的值也为 001(Prefix3)、0001(Prefix4) 等。 谢谢
在处理前导零时,如果导出到 excel,则需要谨慎。 Excel 倾向于超越自己并自动 trim 前导零。否则你的代码很好,在任何其他文本编辑器中打开文件应该显示零。
编辑:截至 2021 年 8 月 5 日再次测试,这不再有效。 :(
我知道这是一个老问题,但我偶然发现了一个在 excel 中打开 .csv 输出时保持前导零的解决方案。在用 R 编写 .csv 之前,在每个值的前面添加一个撇号,如下所示:
vector <- sapply(vector, function(x) paste0("'", x))
当您在 excel 中打开输出时,撇号会告诉 excel 保留所有字符而不是删除前导零。此时您可以将该列格式化为“文本”,然后进行查找和替换以删除撇号(也许为此制作一个宏)。
如果只是为了视觉需要,只需要在写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 中。
将文件另存为 csv 文件,但扩展名为 txt。然后使用 read.table
和 sep=","
:
write.csv(ClusterTable,file="My_Clusters.txt")
read.table(file=My_Clusters.txt, 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")
这几乎是您从 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')
您必须使用 format
:
format(your_data$your_column, trim = F)
因此,当您导出为 .csv 时,前导零将继续存在。