我需要为同事提供一个csv,他们可以在Excel中轻松使用它。 CSV的不同部分存储在不同的data.tables中,因为它们的结构不同。
现在出现了问题,每当我想将data.tables导出到一个csv中时,将具有数字和字符串值的列的数据类型设置为chr
,这当然会在Excel中使用数字产生问题。 (还请注意,这个问题要严重得多,因为它是德国,而我们使用的是另一个小数点分隔符。)我认为这是由于大多数导出工具fwrite
,write.csv
,首先rbind
将data.tables合并为一个,然后将其导出。
有没有一种方法可以创建一个可以在一个列中存储不同data.type的csv?目前,我存储每个csv文件的每个data.table,但因此我正在创建手动工作,而我不希望这样做。
一个最小的最小工作示例:
library(data.table)
dt.a <- data.table(D = letters[12:22]
, E = seq(from = 10, to = 11, by = 0.1)
)
dt.b <- data.table(A = seq(from = 1, to =2, by = 0.1)
, B = letters[1:11]
)
fwrite(x = rbind(dt.b
, dt.a
, use.names = FALSE)
, file = "test.csv"
, sep = ";"
, dec = ","
, col.names = FALSE
, row.names = FALSE
)
这将导致如下所示的csv文件,并且可以看出,数字的格式不容易在Excel中导入。
1;a
1.1;b
1.2;c
1.3;d
1.4;e
1.5;f
1.6;g
1.7;h
1.8;i
1.9;j
2;k
l;10
m;10.1
n;10.2
答案 0 :(得分:0)
这个问题的答案是否定的:
有没有一种方法可以创建一个可以在一个列中存储不同data.type的csv?
列是向量,仅由一种类型/类组成。您可以创建列表列,即列表列,因此可以包含异构元素,但是我认为这不能很好地转换为Excel表。
您的选择是:
cbind(dt.a, dt.b)
按列而不是按行绑定data.tables writexl
库将多张工作表直接导出到XLSX。这可能是您最好的选择。尝试这样的事情:writexl::write_xlsx(list(dt_a = dt.a, dt_b = dt.b), "test.xlsx")
输出是XLSX,其中有两张纸分别对应于您的两个data.tables。
我可能应该提到writexl
开发人员在文档中包含了一个(运行异常)的Clippy。我个人认为这很有趣,但是很多人very annoyed。