Pivot_Long:Values_ptype:可以';t将<;整数>;转换为<;字符>; [英] pivot_longer: values_ptypes: can't convert <integer> to <character>
本文介绍了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.
这应该可以将Type1
和Type2
组合在一起,但它不起作用。
我想知道在这种情况下无法强制类型转换的原因。
推荐答案
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:可以';t将<;整数>;转换为<;字符>;的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!