【问题标题】:In `dplyr`, when use `pivot_wide` ,I want to replace 'NA' at the same time在 `dplyr` 中,当使用 `pivot_wide` 时,我想同时替换 'NA'
【发布时间】:2022-01-13 01:25:14
【问题描述】:

dplyr,当使用pivot_wide时,我想同时替换'NA'。 这是下面的代码,它们不起作用。任何人都可以帮忙吗?谢谢!

library(tidyverse)
test_data <- data.frame(category=c('A','B','A','B','A','B','A','B'),
                        sub_category=c('a1','b1','a2','b2','a1','b1','a2','b2'),
                        sales=c(1,2,4,5,8,1,4,6))

#method1: Error: Can't convert <double> to <list>.
test_data %>% pivot_wider(names_from = 'category',
                          values_from = 'sales',
                          values_fill = 0) %>% unnest() 


#method2: code can't run
test_data %>% pivot_wider(names_from = 'category',
                          values_from = 'sales') %>% unnest() %>% 
  as.data.frame() %>% 
  mutate(across(where(is.numeric),function(x) stringr::str_replace('NA',0)))

【问题讨论】:

  • values_fill 参数必须是values_fill = list(column_name = value) 形式的列表。
  • 我无法运行您的任何代码。您能否显示示例输入所需的输出?
  • 另外,只是为了一般知识,缺失值NA与字符串"NA"不同。
  • @Gregor Thomas 我试过'values_fill = list(column_name = value)',但它不起作用,你能帮忙显示完整的代码吗?谢谢!
  • 我很想向您展示代码,但我不知道您的目标是什么。您能否按照我的第二条评论显示您想要的输出?

标签: r dplyr pivot tidyverse


【解决方案1】:
test_data %>% 
     pivot_wider(names_from = 'category',  values_from = 'sales', 
                 values_fn = list, values_fill = list(0))  %>%
     unnest(c(A, B))

# A tibble: 8 x 3
  sub_category     A     B
  <chr>        <dbl> <dbl>
1 a1               1     0
2 a1               8     0
3 b1               0     2
4 b1               0     1
5 a2               4     0
6 a2               4     0
7 b2               0     5
8 b2               0     6

【讨论】:

    【解决方案2】:

    这是你想要的吗?

    test_data %>% 
        pivot_wider(names_from = 'category',
                    values_from = 'sales') %>% 
        unnest(cols = c(A, B)) %>% 
        mutate(across(where(is.numeric), replace_na, 0))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-03-10
      • 2023-04-02
      • 2018-10-01
      • 2019-01-13
      • 2019-03-19
      • 1970-01-01
      相关资源
      最近更新 更多