【问题标题】:Adding two columns in a tibble and saving the sum to third column is making the third column a dataframe在小标题中添加两列并将总和保存到第三列正在使第三列成为数据框
【发布时间】:2019-10-04 05:24:11
【问题描述】:

我正在生成报告,在尝试使用 xlsx 包的 write.xlsx 编写 tibble 时,它​​给出了错误(即使在我在 write.xlsx 中指定 as.data.frame(tibble) 之后)。 检查 tibble 后,我意识到当我添加多个列并将结果存储在 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”列已更改为数据框。

有人可以告诉我为什么会发生这种情况,以及如何执行上述操作。

已编辑:OK 似乎是因为 tibble 不降维,它不像添加两个向量。

【问题讨论】:

  • 您能添加重现问题的步骤吗?你是如何添加列的?和问题中的一样吗?
  • 无法重现。
  • NelsonGon,在上面添加了可重现的代码。是的,我已经添加了使用 [,colnum] 的问题
  • 对我来说一切正常。你能添加你的 sessionInfo 吗?您是否只是对课程“感到困惑”,即课程中有data.frame?我觉得如果你想用tibbles,最好还是用tidyverse,用dplyr之类的。
  • 试试marks$Total &lt;- marks$math + marks$physics 然后write.xlsx ?知道错误是什么也很有用。

标签: r tibble


【解决方案1】:

我认为这是因为默认情况下,当您使用 [] 访问其中的一部分时,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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-06
    • 1970-01-01
    相关资源
    最近更新 更多