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_组
edtible
这不起作用(又称:破坏了矩阵的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)