使用pivot_wider或其他解决方案在R中输出我的数据集

问题描述

我还是R的新手,但在帮助下取得了进步 在这个群体中。我正在努力解决自己认为的问题 可以用pivot_wider解决,尽管我还没有成功。 预先感谢您的协助!

我有一个数据集,如下所示:

    RaceNum Horse             DrawA row_c
     <int> <chr>              <dbl> <int>
 1   21127 A'Ali            -0.242      1
 2   20260 A'Ali             0.128      2
 3   17889 A'Ali            NA          3
 4   21712 A'Shamardi       -0.519      1
 5   20340 A'Shamardi        0.767      2
 6    5285 A Bit Of A Touch NA          1
 7    4825 A Bit Of A Touch -0.0256     2
 8    4207 A Bit Of A Touch  0.139      3
 9    3397 A Bit Of Ginger   0.704      1
10    3206 A Bit Of Ginger   0.152      2
# ... with 64,290 more rows

我的目标是创建如下输出

Horse           DrawA_1     DrawA_2     DrawA_3
A'Ali           -0.242      0.128       NA
A'Shamardi      -0.519      0.767       NA
A Bit of a Touch    NA      -0.0256     0.139
etc

基本上,对于每匹马,我需要输出3的DrawA值 实例。 也许ivot_wider不是执行此操作的最佳方法? 我试图使用group_by(Horse)输出我需要的东西,然后 使用摘要可在4列宽的数据集中显示输出。 希望有人能帮忙!

解决方法

如果使用pivot_wider作为名称,则可以很容易地在数据上使用row_c。这是一些简单数据的例子。

library(tidyr)

df <- data.frame(Horse = c("A","A","B","B"),DrawA = runif(5),row_c = c(1:3,1:2))

pivot_wider(df,names_from = row_c,names_prefix = "DrawA_",values_from = DrawA)
#> # A tibble: 2 x 4
#>   Horse DrawA_1 DrawA_2 DrawA_3
#>   <chr>   <dbl>   <dbl>   <dbl>
#> 1 A       0.979   0.153   0.427
#> 2 B       0.853   0.210  NA
,

Base R解决方案:

df1 <- as.data.frame.matrix(xtabs(DrawA~Horse+row_c,df))
within(setNames(df1,paste0("DrawA_",names(df1))),{horse <- row.names(df1)})