如何在Excel中显示这个不同?

时间:2014-08-28 06:47:01

标签: r excel

我在R中进行了一些计算,我想将它生成为像这样的excel

DATA1          DATA2

54.364         2.05

56.532

54.21

41.485

65.8745

54.0546

75.156

,而是像这样来了

DATA1          DATA2

54.364         2.05

56.532         2.05

54.21          2.05

41.485         2.05

65.8745        2.05

54.0546        2.05

75.156         2.05

我在excel中生成它的功能是

write.xlsx(c(data.frame(DATA1),data.frame(DATA2)))

虽然data1的值为54.364,56.532,54.21,41.485,65.8745,54.0546,75.156和data2 2.05

2 个答案:

答案 0 :(得分:3)

Excel有一个相当奇怪的"副本"功能,它复制一个函数,将标量返回到调用范围中的每个单元格。这似乎发生在你身上。

解决此问题的一种方法是在直接调用的函数顶部使用Application.Caller。这将返回表示调用范围的Range对象。然后,您可以使用#N/A填充函数返回值。您可以通过将variant类型插入到数组VT_ERROR并将错误值设置为xlErrNa来实现此目的。您可以使用CVErr(xlErrNa)一步完成该操作。使用#N/A填充与Excel对返回数组的函数的超大调用范围的匹配。

答案 1 :(得分:0)

也可以使用以下代码: (在https://stackoverflow.com/questions/25547210/how-to-produce-this-order-in-r中使用@ akrun的数据)

DATA1 <- c(54.364, 56.532, 54.21, 41.845, 65.8745, 54.0546, 75.156)
DATA2 <- 2.05
DATA3 <- c(2.2, 2.4, 2.32)

outdf = data.frame(data1=numeric(), data2=numeric(), data3=numeric())
for(i in 1:length(DATA1)) outdf[i,]=c(DATA1[i],0,0)
for(i in 1:length(DATA2)) outdf$data2[i]=DATA2[i]
for(i in 1:length(DATA3)) outdf$data3[i]=DATA3[i]
outdf
    data1 data2 data3
1 54.3640  2.05  2.20
2 56.5320  0.00  2.40
3 54.2100  0.00  2.32
4 41.8450  0.00  0.00
5 65.8745  0.00  0.00
6 54.0546  0.00  0.00
7 75.1560  0.00  0.00

然后你可以使用outdf和write.xlsx。