在 R 中使用 `pivot_longer 和 `values_ptypes`

Using `pivot_longer with` `values_ptypes` in R

我的问题很简单:

我一直在尝试将 pivot_longervalues_ptypes 一起使用:

这是我的代码:

df <-mtcars %>% rownames_to_column()
df[1,] %>% pivot_longer(everything(),names_to = 'My Values', values_ptypes = list(rowname = 'character'))

df[1,] %>% pivot_longer(everything(),names_to = 'My Values', values_ptypes = list(rowname = as.character))

我有这条消息:Error: Can't combine rowname <character> and mpg <double>.

values_ptypes 的想法是警告 pivot_longer 我有一列是 character,对吗?

TL;DR:如果您想在旋转时转换变量的 class,请将 values_ptypes 更改为 values_transform


所以首先,您得到错误 not 因为 values_ptypes 指定错误,但因为您试图将数字和字符值放入一列中,并且 tidyr 不知道如何:

library(dplyr)

df <- mtcars %>% tibble::rownames_to_column()

df[1, c(1:2)] %>% 
  tidyr::pivot_longer(
    everything(),
    names_to = 'My Values'
  )

# > Error: Can't combine `rowname` <character> and `mpg` <double>.

其次:values_ptypes用于确认您的值符合预期,而不是更改它们。

修复

正如@Onyambu 评论的那样,如果你想改变你的价值观,你可以使用 values_transform:

df[1, ] %>% 
  tidyr::pivot_longer(
    everything(),
    names_to = 'My Values',
    values_transform = list(value = as.character)
  )

结果:

# A tibble: 12 x 2
   `My Values` value    
   <chr>       <chr>    
 1 rowname     Mazda RX4
 2 mpg         21       
 3 cyl         6        
 4 disp        160      
 5 hp          110      
 6 drat        3.9      
 7 wt          2.62     
 8 qsec        16.46    
 9 vs          0        
10 am          1        
11 gear        4        
12 carb        4