在 tibble 中添加两列并将总和保存到第三列是使第三列成为数据框
Adding two columns in a tibble and saving the sum to third column is making the third column a dataframe
我正在生成一份报告,在尝试使用 xlsx 包的 write.xlsx 编写 tibble 时,它给出了一个错误(即使在我在 [=22= 中指定 as.data.frame(tibble) 之后]).
查看tibble,我发现当我添加多个列并将结果存储在tibble中的另一列时,总列变成了一个dataframe。
示例:
> 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" 列已更改为数据帧。
谁能告诉我为什么会发生这种情况,以及如何执行上述操作。
已编辑:好的似乎是因为 tibble 不会降低维度,这不像是添加两个向量。
我认为这是因为当您使用 []
访问其中的一部分时,默认情况下 tibbles 不会丢弃第二维,而数据帧会。比较:
> 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
我正在生成一份报告,在尝试使用 xlsx 包的 write.xlsx 编写 tibble 时,它给出了一个错误(即使在我在 [=22= 中指定 as.data.frame(tibble) 之后]). 查看tibble,我发现当我添加多个列并将结果存储在tibble中的另一列时,总列变成了一个dataframe。
示例:
> 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" 列已更改为数据帧。
谁能告诉我为什么会发生这种情况,以及如何执行上述操作。
已编辑:好的似乎是因为 tibble 不会降低维度,这不像是添加两个向量。
我认为这是因为当您使用 []
访问其中的一部分时,默认情况下 tibbles 不会丢弃第二维,而数据帧会。比较:
> 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