write_csv-导出尾随空格(不消除)

时间:2018-07-26 19:46:52

标签: r

我正在尝试将表格导出为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中打开它,从而弄乱了数据。有提示吗?

1 个答案:

答案 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'的格式与文件指定的格式不同”。扩展程序...”

详细信息:https://en.wikipedia.org/wiki/SYmbolic_LinK_(SYLK)