【问题标题】:Using `pivot_longer with` `values_ptypes` in R在 R 中使用 `pivot_longer` 和 `values_ptypes`
【发布时间】:2021-12-30 21:42:50
【问题描述】:

我的问题很简单:

我一直在尝试将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 &lt;character&gt; and mpg &lt;double&gt;.

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

【问题讨论】:

  • 您的建议有效@akrun,再次感谢。如何使用 pivot_longervalues_ptypes 参数做到这一点?
  • 按照您的建议,在 pivot_longer 之后,我将不得不再次使用 mutate 来更改为 double,对吧?
  • 我看到了@akrun。再次感谢!新年快乐!
  • 你要找的或多或少是df[1,] %&gt;% pivot_longer(everything(),names_to = 'My Values', values_transform = list(value = as.character))

标签: r dplyr tidyr


【解决方案1】:

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


首先,您会收到错误不是,因为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 

【讨论】:

  • 不需要 mutate 函数。检查我的评论
  • 随便df[1,] %&gt;% pivot_longer(everything(),names_to = 'My Values', values_transform = list(value = as.character))
  • 哦,你是对的!我试过了,但我把value 拼错了values。这么简单的错误。我会改变我的答案并感谢你。
猜你喜欢
  • 2021-11-30
  • 1970-01-01
  • 2022-11-15
  • 1970-01-01
  • 1970-01-01
  • 2021-01-19
  • 1970-01-01
  • 2021-09-20
  • 1970-01-01
相关资源
最近更新 更多