【发布时间】:2017-07-07 23:28:28
【问题描述】:
我有一个这样的数据框:
df<- data.frame(region = c("1","1","1","1","1","2","3","3","3"),
loc = c("104","104","104","105","105","106","107", "108", "109"),
interact = c("A_B","A_B", "B_C", "C_D", "A_B", "E_F", "E_F", "F_G", "A_B"))
我想制作一个数据框:
1) 计算每个region 子集的loc 级别之间发生的给定交互的发生频率。因此,在上面的示例中,在区域 1 中有两个 loc(104 和 105),它们都具有交互 A_B。因此,区域 1 = 2 的 A_B 的发生频率。不计算同一 loc 中重复的 interact 级别。因此,虽然 A_B 在区域 1 中出现了 3 次,但它仅在两个唯一的 loc 中出现。发生频率计算此interact 出现在多少个唯一loc 级别。
2) 新数据框应矢量化所有区域中所有可能的interact 级别,并计算每个区域的这些发生率。因此,对于该区域未发生的所有级别的交互,都应包括 0。
3) 第一行需要是该区域中唯一loc 级别的计数。在区域 1 中有 2 个地方级别(104,105),区域 2 有 1 个地方级别(106),在区域 3 中有 3 个地方级别(107-109)。
最终输出将如下所示:
output<- data.frame(interact = c("","A_B","B_C","C_D","E_F","F_G"),
region1 = c("2","2","1","0","1","0"),
region2 = c("1","0","0","0","1","0"),
region3 = c("3","1","0","0","1","1"))
我不知道从哪里开始,但这是我从@akrun 在Convert from long to wide format counting frequency of eliminated factor level (Prepping dataframe for input into iNEXT Online) 上发布的类似问题中改编的内容,但出现以下错误:
library(tidyverse)
df %>%
group_by(region = paste0('region', region)) %>%
summarise(interact = "", V1 = n_distinct(loc)) %>%
spread(region, V1),
df %>%
group_by(region = paste0('region', region) & loc),
interact = as.character(interact)) %>%
summarise(V1 = length(unique((interact)) %>%
spread(region, V1, fill = 0))
【问题讨论】:
-
到目前为止您尝试过哪些无效的方法?
-
我已添加到 OP 以解决您的问题。感谢您的宝贵时间。