当我在我的数据上使用 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。人工审校改正很痛苦,但并非不可能。
在
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