数据争论:我如何过滤具有多个值的行?或其他处理嵌套值的方法

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

当我在我的数据上使用 pivot_wider() 时,有一些重复的数值,强制转换为具有嵌套值的列表。

举个例子:

dfx <- data.frame("Arb_PersonID" = c(1,1,2,2,2,2), 
                  "LabComponentName" = c("2ch", "4ch", "2ch", "4ch", "2ch", "4ch"), 
                  "LabResult" = c(56, 55, 50, 54, 56, 60))

class(dfx1$`2ch`)

这表明:

> tibble(dfx)
# A tibble: 6 × 3
  Arb_PersonID LabComponentName LabResult
         <dbl> <chr>                <dbl>
1            1 2ch                     56
2            1 4ch                     55
3            2 2ch                     50
4            2 4ch                     54
5            2 2ch                     56
6            2 4ch                     60

> class(dfx$LabResult)
[1] "numeric"

然后 pivot_wider:

dfx1 <- dfx %>%
  pivot_wider(names_from = LabComponentName, values_from = LabResult)



  Arb_PersonID `2ch`     `4ch`    
             1  56         55
             2  c(50,56)  c(54,60)

> class(dfx1$`2ch`)
[1] "list"

我想使用 2 个值的平均值(即 53 而不是 c(50,56))并保持类数字。

在此先感谢您的帮助。我正在使用一个包含 14,000 行的非常大的数据集,这些重复项大约是 1/500。人工审校改正很痛苦,但并非不可能。

r pivot tidyr
1个回答
0
投票

values_fn
调用中有一个方便的
pivot_wider
选项,它允许您在有多个值时简单地计算平均值:

library(tidyverse)

dfx <- data.frame("Arb_PersonID" = c(1,1,2,2,2,2), 
                  "LabComponentName" = c("2ch", "4ch", "2ch", "4ch", "2ch", "4ch"), 
                  "LabResult" = c(56, 55, 50, 54, 56, 60))

dfx %>%
  pivot_wider(names_from = LabComponentName, values_from = LabResult,
              values_fn = mean)
#> # A tibble: 2 × 3
#>   Arb_PersonID `2ch` `4ch`
#>          <dbl> <dbl> <dbl>
#> 1            1    56    55
#> 2            2    53    57
© www.soinside.com 2019 - 2024. All rights reserved.