R中cbind TIBLE和矩阵时的不一致性

R中cbind TIBLE和矩阵时的不一致性,r,matrix,dplyr,tidyverse,tibble,R,Matrix,Dplyr,Tidyverse,Tibble,不幸的是,当cbind不同的两个特定对象时,我发现colnames中有一个奇怪的不一致性:tibbles,这是由_group()编辑的和matrix。我之所以在这里写这篇文章,是因为我能够理解cbind操作和这两个对象在引擎盖下发生了什么 考虑以下对象: 简单易懂 by_组edtible 这不起作用(又称:破坏了矩阵的colname) #tibble(groupby())&matrix:oops!!!! cbind(tb2,mtx) #新名称: #*NA->…4 ##A tibble:8 x 4

不幸的是,当
cbind
不同的两个特定对象时,我发现colnames中有一个奇怪的不一致性:
tibbles
,这是由_group()编辑的
matrix
。我之所以在这里写这篇文章,是因为我能够理解
cbind
操作和这两个对象在引擎盖下发生了什么

考虑以下对象:

简单易懂
by_组
ed
tible
这不起作用(又称:破坏了
矩阵的colname
#tibble(groupby())&matrix:oops!!!!
cbind(tb2,mtx)
#新名称:
#*NA->…4
##A tibble:8 x 4
##分组:tbl#U分组人[4]
#tbl2_名称tbl_组由N_组…4[,“mtx_名称”]
#                            
#一一一一一一
#2B22
#33B23
#4C414
#5d45
#6D46
#7 d 4 7
#8D48

任何关于正在发生什么或如何预防的直觉都是非常受欢迎的。提前谢谢。

我们可以通过
取消组
删除组属性,现在
cbind
应该可以工作了

library(dplyr)
cbind(ungroup(tb2), mtx)
-输出

#    tbl2_name tbl_group_by N_by_group mtx_name
#1         1            a          1        1
#2         2            b          2        2
#3         3            b          2        3
#4         4            c          1        4
#5         5            d          4        5
#6         6            d          4        6
#7         7            d          4        7
#8         8            d          4        8

或者特别使用
cbind.data.frame
,因为默认情况下,它可以使用
cbind.matrix

cbind.data.frame(tb2, mtx)

当我们创建“tb2”时,分组后,请确保
取消分组
,以防止此类问题

tb2 <- tb2 %>%
         group_by(tbl_group_by) %>%
         mutate(N_by_group = n())  %>%
         ungroup

谢谢你的回答@akrun。实际上,
ungroup
解决了这个问题,但是。。。创建
tible
时,是否可以
解组
ed?因为,也许这样更好,而不是开始猜测我的Tibble中的哪个来自
group
ed,是吗?@lvaroA.GutiérrezVargas您可以使用
as.data.frame
将所有TIB文件转换为data.frame,这样每当有group\u by操作时,它就会删除组属性或在管道末端取消组。更新帖子谢谢@akrun!!!那正是我要找的。
# Comparison 

# tibble & data.frame: OK
cbind(tbl,df)
# tbl_name df_name
# 1        1       1
# 2        2       2
# 3        3       3
# 4        4       4
# 5        5       5
# 6        6       6
# 7        7       7
# 8        8       8


# matrix & data.frame: OK
cbind(mtx,df)

# mtx_name df_name
# 1        1       1
# 2        2       2
# 3        3       3
# 4        4       4
# 5        5       5
# 6        6       6
# 7        7       7
# 8        8       8

# tibble & matrix: OK
cbind(tbl,mtx)

# tbl_name mtx_name
# 1        1        1
# 2        2        2
# 3        3        3
# 4        4        4
# 5        5        5
# 6        6        6
# 7        7        7
# 8        8        8

# tibble(group_by()) & matrix: oops!!!!
cbind(tb2,mtx)

# New names:
#   * NA -> ...4
# # A tibble: 8 x 4
# # Groups:   tbl_group_by [4]
# tbl2_name tbl_group_by N_by_group ...4[,"mtx_name"]
# <int> <chr>             <int>             <int>
# 1         1 a                     1                 1
# 2         2 b                     2                 2
# 3         3 b                     2                 3
# 4         4 c                     1                 4
# 5         5 d                     4                 5
# 6         6 d                     4                 6
# 7         7 d                     4                 7
# 8         8 d                     4                 8
library(dplyr)
cbind(ungroup(tb2), mtx)
#    tbl2_name tbl_group_by N_by_group mtx_name
#1         1            a          1        1
#2         2            b          2        2
#3         3            b          2        3
#4         4            c          1        4
#5         5            d          4        5
#6         6            d          4        6
#7         7            d          4        7
#8         8            d          4        8
cbind.data.frame(tb2, mtx)
tb2 <- tb2 %>%
         group_by(tbl_group_by) %>%
         mutate(N_by_group = n())  %>%
         ungroup
f1 <- function(dat) {
       if(dplyr::is_grouped_df(dat)) {
        dat <- ungroup(dat)
       }
       dat
   }

cbind(f1(tb2), mtx)