我正在尝试将表格导出为CSV格式,但是我的其中一列很特殊-就像数字字符串一样,只是每次字符串的长度都必须相同,因此我在较短的数字后面添加了空格使其达到一定的长度(在这种情况下,我将其设为5)。
library(dplyr)
library(readr)
df <- read.table(text="ID Something
22 Red
55555 Red
123 Blue
",header=T)
df <- mutate(df,ID=str_pad(ID,5,"right"," "))
df
ID Something
1 22 Red
2 55555 Red
3 123 Blue
不幸的是,当我尝试在某处执行write_csv时,尾部的空格消失了,这对我要使用的空格不利。我认为这是因为我要从R服务器下载csv,然后在Excel中打开它,从而弄乱了数据。有提示吗?
答案 0 :(得分:2)
str_pad()
似乎是stringr
包中的一个函数,我正在使用的R 3.5.0当前不可用-这也可能是引起您问题的原因。如果该功能确实适合您,请忽略下一步,直接跳到下面的我的Excel注释
添加空格。这是我以R为基础完成此任务的方式
# a custom function to add arbitrary number of trailing spaces
SpaceAdd <- function(x, desiredLength = 5) {
additionalSpaces <- ifelse(nchar(x) < desiredLength,
paste(rep(" ", desiredLength - nchar(x)), collapse = ""), "")
paste(x, additionalSpaces, sep="")
}
# use the function on your df
df$ID <- mapply(df$ID, FUN = SpaceAdd)
# write csv normally
write.csv(df, "df.csv")
注意,当您导入Excel时,您应该使用“从文本导入”向导,而不仅仅是打开.csv
。这是因为您需要将'ID'列标记为文本,以保留空格
注意2 我今天了解到,将第一列命名为“ ID ”实际上可能会导致excel的其他问题,因为这可能会误解文件的性质,并将其视为SYLK文件。因此,如果可能的话,最好避免使用此列名。
这是维基百科;博士:
当保存逗号分隔值(CSV)格式且未加引号的第一个字段名称为“ ID”(即前两个字符)时,会发生SYLK文件的“常见”(和虚假)“发生”情况匹配SYLK文件格式的前两个字符。然后,Microsoft Excel(至少到Office 2016)将发出与文件格式有关的误导性错误消息,例如“您要打开的文件'x.csv'的格式与文件指定的格式不同”。扩展程序...”