R 将_行转换因子/数字列添加到字符中;无法添加有序因子

R 将_行转换因子/数字列添加到字符中;无法添加有序因子,r,dplyr,tidyverse,tibble,R,Dplyr,Tidyverse,Tibble,我需要使用tibble::add_row函数将一行添加到现有tibble中 df = tibble(cola = as.ordered(c(1, 2, 3)), colb = as.factor(c("xx", "xxx", "xxx"))) df2 = df %>% add_row(tibble_row(cola = 1, colb = as.factor("yyy"))) 这将我的列cola转换为char

我需要使用
tibble::add_row
函数将一行添加到现有
tibble

df = tibble(cola = as.ordered(c(1, 2, 3)), colb = as.factor(c("xx", "xxx", "xxx")))
df2 = df %>% add_row(tibble_row(cola = 1, colb = as.factor("yyy")))
这将我的列
cola
转换为
char
变量。如果我将脚本更改为:

df %>% add_row(tibble_row(cola = as.ordered(1), colb = as.factor("yyy")))
我收到以下错误消息:

错误:无法组合
.1$cola
.2$cola

我尝试了其他数据结构
add_row
适用于
numeric
char
数据格式。但是,如果
已排序
,则失败。对于新行,除非指定了数据类型(如
as.factor
),否则
add_row
会将所有
因子
静默地转换为
char
。这一问题已被报道。但是,我找不到解决方案,例如添加一个
参数
,比如
stringsAsFactors=T
。用
tibble\u row()
作为tibble\u row()
再加上
dplyr::bind\u rows()
将新行设为一个
tibble
,也没有帮助,因为它会在
有序的
因子上抛出相同的错误

我的问题

  • 如何停止
    add_row
    将所有因子转换为字符,而不定义新行中每个相关列的数据结构
  • add_row
    是否可以不处理
    ordered
    因素

  • 您需要指定可用的有序级别:

    df %>% add_row(tibble_row(cola = ordered(1, levels = 1:3), colb = as.factor("yyy")))
    # A tibble: 4 x 2
      cola  colb 
      <ord> <fct>
    1 1     xx   
    2 2     xxx  
    3 3     xxx  
    4 1     yyy  
    
    df%>%add_行(tibble_行(cola=ordered(1,levels=1:3),colb=as.factor(“yyy”))
    #一个tibble:4x2
    可乐瓶
    1 xx
    2 xxx
    3 xxx
    4.1 yyy
    
    使用的软件包版本是什么?第一列的类型不同,第二列的类型不同levels@akrun分别为'tibble'和'dplyr'的3.0.1和1.0.0。谢谢你对levels的评论。谢谢。我完全没有想到那场争论。我没有足够的分数来提高你的答案分数,但是,我的分数是正确的,至少在第二个问题上是正确的。这解决了我的第二个问题。对问题1有什么想法吗?@TDS困难在于,当你添加一行时,你实际上是在每个向量上添加一个项目,这些向量构成了tibble。当您尝试添加
    colb=“yyy”
    时,您正在指定数据结构:您正在隐式指定字符类型。所以,实际上,R看到您正试图将一个字符连接到一个因子。如果该字符串不作为因子级别存在,R不会简单地将其添加为因子级别。可以为
    tibble\u行
    编写一个包装器来实现这一点,但它不是函数接口的一部分,这是有充分理由的。感谢您的澄清。有道理。