Pivot_Long:Values_ptype:可以't将<整数>转换为<字符> [英] pivot_longer: values_ptypes: can't convert <integer> to <character>

查看:32
本文介绍了Pivot_Long:Values_ptype:可以't将<整数>转换为<字符>的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

此问题与此问题相关dplyr median by group

并已在此处回答:pivot_longer with multiple classes causes error ("No common type")

现在我了解到我们应该使用values_transform而不是values_ptypes

我想知道这是什么原因?是否有更深层次的原因导致values_ptypes不起作用而values_transform现在起作用:

以下是导致我遇到此问题的上述示例:

数据帧:

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使用values_ptypes这样的参数:不工作!

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.

这应该可以将Type1Type2组合在一起,但它不起作用。

我想知道在这种情况下无法强制类型转换的原因。

推荐答案

pivot_longer需要调整列的形状以使其具有相同的类型。这里的"Type1"和"Type2"在class中是不同的。通过转换为values_transform中的character将其更改为单个类。根据?pivot_longer

Names_ptype、Values_ptype-列名-原型对的列表。原型(或简称为ptype)是定义向量的类型、类和属性的零长度向量(如INTEGER()或NUMERIC())。如果要确认创建的列是预期的类型,请使用这些参数。请注意,如果要更改(而不是确认)特定列的类型,则应改用NAMES_TRANSION或VALUES_TRANSION

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调用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.

这篇关于Pivot_Long:Values_ptype:可以&#39;t将&lt;整数&gt;转换为&lt;字符&gt;的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆