gpt4 book ai didi

r - 跨几列,计算对的实例

转载 作者:行者123 更新时间:2023-12-02 02:46:35 25 4
gpt4 key购买 nike

我想计算多列中的对。也就是说,对于两列以上,计算同一行中特定值对出现的次数。

假设我问一些人是否喜欢不同种类的食物,他们可以回答"is"或“否”。我最终得到了这个数据集:

foods <- 
data.frame(
fruit = c("yes", "yes", "no"),
veg = c("yes", "yes", "yes"),
meat = c("yes", "no", "yes")
)
foods

我想计算任意两种食物得到"is"的次数。我希望最终能得到这样的结果:

desired <- 
data.frame(
pair.1 = c("fruit", "fruit", "veg"),
pair.2 = c("veg", "meat", "meat"),
Freq = c(2, 1, 2)
)
desired

这也可以工作:

desired.2 <- 
data.frame(
pair. = c("fruit, veg", "fruit, meat", "veg, meat"),
Freq = c(2, 1, 2)
)
desired.2

如果可能的话,我希望我可以使用一个解决方案最终对 3、4 等的组合执行相同的操作(我的实际数据有超过 3 列)。有什么好的解决方案,最好使用 dplyr?

预先感谢您的帮助!

最佳答案

一个 dplyrpurrr 解决方案可能是:

map_dfr(.x = combn(names(foods), 2, simplify = FALSE),
~ foods %>%
select(.x) %>%
summarise(pair_1 = .x[1],
pair_2 = .x[2],
n = sum(rowSums(select(., everything()) == "yes") == 2)))

pair_1 pair_2 n
1 fruit veg 2
2 fruit meat 1
3 veg meat 2

如果你想要更通用的东西:

fun <- function(x) {
map_dfr(.x = combn(names(foods), x, simplify = FALSE),
~ foods %>%
select(.x) %>%
summarise(pairs = paste(.x, collapse = " "),
n = sum(rowSums(select(., everything()) == "yes") == x)))
}

fun(2)

pairs n
1 fruit veg 2
2 fruit meat 1
3 veg meat 2

关于r - 跨几列,计算对的实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62698929/

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