运行pivot_wider后处理NA)>

问题描述 投票:0回答:1

我有一个长的数据框,我想使用pivot_wider扩大宽度:

library(tidyr)
example_data <- data.frame(
    name = c("bob", "bob", "dick", "dick", "harry", "harry"), 
    sport = c("baseball", "football", "hockey", "basketball", "football", "basketball")
)
pivot_wider(example_data, names_from = sport, values_from = sport)

这给出了预期的结果,但是有很多NA

  name  baseball football hockey basketball
1 bob   baseball football NA     NA        
2 dick  NA       NA       hockey basketball
3 harry NA       football NA     basketball

我想将运动名称转换为TRUE(因为运动名称已由列名称表示),然后将NA转换为FALSE,从而创建如下数据框:

   name baseball football hockey basketball
1   bob     TRUE     TRUE  FALSE      FALSE
2  dick    FALSE    FALSE   TRUE       TRUE
3 harry    FALSE     TRUE  FALSE       TRUE

我以为这段代码可以解决问题,但是却引发了错误:

pivot_wider(
    example_data, 
    names_from = sport, 
    values_from = sport,
    values_fill = list(sport = FALSE),
    values_fn = list(sport = !is.na)
)
Error in !is.na : invalid argument type

下面的代码使我得到了与我所寻找的相反的东西,然后我可以将其转换为所需的数据框:

pivot_wider(
    example_data, 
    names_from = sport, 
    values_from = sport,
    values_fill = list(sport = TRUE),
    values_fn = list(sport = is.na)
)

是否有一种方法可以直接到达所需的数据框?而且有没有关于如何使用values_fn参数的教程,因此我可以弄清楚为什么values_fn = list(sport = !is.na)不起作用?谢谢。

我有一个长的数据框,我想使用pivot_wider进行扩展:library(tidyr)example_data

r
1个回答
1
投票

一种方法是使用TRUE值创建一个虚拟列,然后使用pivot_wider

© www.soinside.com 2019 - 2024. All rights reserved.