代码之家  ›  专栏  ›  技术社区  ›  TarJae

pivot\u longer:值\u p类型:无法将<integer>转换为<character>[重复]

  •  1
  • TarJae  · 技术社区  · 4 年前

    这个问题与这个问题有关 dplyr median by group

    这里已经有了答案: pivot_longer with multiple classes causes error ("No common type")

    values_transform 而不是 values_ptypes .

    我想知道这是什么原因?还有更深层次的原因吗 不起作用 值转换 现在工作:

    以下是导致我出现此问题的上述示例:

    数据帧:

    df1 <- data.frame(
      Type1 = c("A","A","A", "AB", "AB"),
      Type2 = c(1L,2L,2L, 1L, 1L),
      Value = c(1L, 2L, 1L, NA, NA), 
      Median = c(1L, 1.5, 1.5, NA, NA))
    
      Type1 Type2 Value Median
    1     A     1     1    1.0
    2     A     2     2    1.5
    3     A     2     1    1.5
    4    AB     1    NA     NA
    5    AB     1    NA     NA
    

    pivot_longer 值类型 争论是这样的:不工作!

    library(dplyr)
    library(tidyr)
     df1 %>% 
       pivot_longer(
         cols = contains("Type"),
         names_to = "key",
         values_to = "val", 
         values_ptypes = list(val = 'character')
         )
    Error: Can't convert <integer> to <character>.
    Run `rlang::last_error()` to see where the error occurred.
    

    Type1 Type2 但它不起作用。

    我想知道

    1 回复  |  直到 4 年前
        1
  •  2
  •   akrun    4 年前

    pivot_longer class . 通过转换为,将其更改为单个类 character 在里面 values_transform . 根据 ?pivot_longer

    相反

    library(dplyr)
    library(tidyr)
    df1 %>% 
       pivot_longer(
         cols = contains("Type"),
         names_to = "key",
         values_to = "val", 
         values_transform = list(val = as.character))
    

    -输出

    # A tibble: 10 × 4
       Value Median key   val  
       <int>  <dbl> <chr> <chr>
     1     1    1   Type1 A    
     2     1    1   Type2 1    
     3     2    1.5 Type1 A    
     4     2    1.5 Type2 2    
     5     1    1.5 Type1 A    
     6     1    1.5 Type2 2    
     7    NA   NA   Type1 AB   
     8    NA   NA   Type2 1    
     9    NA   NA   Type1 AB   
    10    NA   NA   Type2 1    
    

    再长一点 pivot_longer_spec

    Browse[2]> 
    debug: out <- vec_c(!!!val_cols, .ptype = val_type)
    Browse[2]> 
    Error: Can't convert <integer> to <character>.
    Run `rlang::last_error()` to see where the error occurred.