我正在生成报告,尝试使用xlsx包的write.xlsx编写标题时,它给出了一个错误(即使在我在write.xlsx中指定as.data.frame(tibble)之后)。 在检查了小节之后,我意识到当我添加多列并将结果存储在小节中的另一列中时,总列已成为数据帧。
示例:
> marks <- tibble(math = c(90,90,85,90),
+ physics = c(90,85,95,80),
+ Total = c(rep(NA,4)))
> marks
# A tibble: 4 x 3
math physics Total
<dbl> <dbl> <lgl>
1 90 90 NA
2 90 85 NA
3 85 95 NA
4 90 80 NA
> class(marks)
[1] "tbl_df" "tbl" "data.frame"
> str(marks)
Classes ‘tbl_df’, ‘tbl’ and 'data.frame': 4 obs. of 3 variables:
$ math : num 90 90 85 90
$ physics: num 90 85 95 80
$ Total : logi NA NA NA NA
> marks$Total <- marks[,1] + marks[,2]
> str(marks)
Classes ‘tbl_df’, ‘tbl’ and 'data.frame': 4 obs. of 3 variables:
$ math : num 90 90 85 90
$ physics: num 90 85 95 80
$ Total :'data.frame': 4 obs. of 1 variable:
..$ math: num 180 175 180 170
>
如上所述,我认为我可以使用R的向量化运算,但是在将两列加起来并将结果存储在Total列中之后,“ Total”列已更改为数据帧。
有人可以让我知道为什么会发生这种情况,以及如何执行上述操作。
编辑:确定似乎是因为tibble不会降低尺寸,这不像添加两个向量。
答案 0 :(得分:0)
我认为这是由于事实的结果,即使用[]
访问部分小对象时,默认小对象不会删除第二维,而数据帧却会删除。比较:
> marks[, 1]
# A tibble: 4 x 1
math
<dbl>
1 90
2 90
3 85
4 90
> marks_df = as.data.frame(marks)
> marks_df[ , 1]
[1] 90 90 85 90
所以marks[, 1] + marks[, 2]
在一个小标题上添加了一个小标题,结果是一个小标题。
为避免这种情况,您可以显式删除第二维,或仅使用列名:
marks$Total <- marks[,1, drop = TRUE] + marks[, 2, drop = TRUE]
marks$Total <- marks$math + marks$physics