這個問題與這個問題dplyr 中位數有關
并且已經在此處回答:具有多個類的 pivot_longer 導致錯誤(“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但它不起作用。
我想知道為什么在這種情況下我不能強制型別轉換。
uj5u.com熱心網友回復:
pivot_longer需要重新調整列的形狀以具有相同的型別。這里'Type1'和'Type2'在class. 通過轉換為characterin將其更改為單個類values_transform。根據?pivot_longer
names_ptypes, values_ptypes - 列名-原型對的串列。原型(或簡稱 ptype)是一個零長度向量(如 integer() 或 numeric()),它定義了向量的型別、類和屬性。如果您想確認創建的列是您期望的型別,請使用這些引數。請注意,如果要更改(而不是確認)特定列的型別,則應改用 names_transform 或values_transform。
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.
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/342973.html
