gpt4 book ai didi

r - tidyverse 使用重复键传播并根据唯一键填充 NA

转载 作者:行者123 更新时间:2023-12-04 11:41:55 27 4
gpt4 key购买 nike

考虑最小的例子:

library(tidyverse)
ex <-tribble(
~id, ~property, ~value,
1, "A", 9,
1, "A", 8,
1, "B", 7,
2, "A", 6,
2, "B", 5
)

我的目标是将属性扩展到列中以获取此表:
tribble(
~id, ~A, ~B,
1, 9, 7,
1, 8, 7,
2, 6, 5
)

id 分组和 property并添加一个键接近但离开NA:
## almost but not quite
ex %>%
group_by(id, property) %>%
mutate(key = row_number()) %>%
spread(property, value) %>%
select(-key) -> X
X

给出:
     id     A     B
1 1 9 7
2 1 8 NA
3 2 6 5

我可以通过将上面的每个 property 分开来解决这个问题。 ,放弃 NAs,然后加入 id :
inner_join(
na.omit(select(X, id, A)),
na.omit(select(X, id, B))
)

但显然这不能推广到任意的属性集。有什么更好的 tidyverse这样做的策略?

注意:前面的几个问题说明了这一点的前半部分,例如构建 key列使 spread没有失败,但看不到解决 NA 的问题s。

最佳答案

您可以使用 fill来自 tidyr :

library(dplyr)
library(tidyr)

ex %>%
group_by(id, property) %>%
mutate(key = row_number()) %>%
spread(property, value) %>%
select(-key) %>%
group_by(id) %>%
fill(-id)

结果:
# A tibble: 3 x 3
# Groups: id [2]
id A B
<dbl> <dbl> <dbl>
1 1 9 7
2 1 8 7
3 2 6 5

关于r - tidyverse 使用重复键传播并根据唯一键填充 NA,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47353073/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com