[英]Summarize pair of occurrences ignoring directionality
給定某些事件,例如人們圍坐在一張桌子旁,我想將它們總結為成對出現的頻率。 換句話說,兩個元素連續/相鄰出現的頻率是多少? 不同之處在於AB
和BA
應該算作兩個,因為我不感興趣A
是否先於B
僅出現在B
。 示例數據:
events <- list()
events[["week_1"]] <- c("A", "B", "C")
events[["week_2"]] <- c("A", "B")
events[["week_3"]] <- c("A", "C", "B")
由此我可以創建成對的元素 :
createPairs <- function(x){
data.frame(cbind(x[-length(x)], x[-1]))
}
pairs_l <- lapply(events, createPairs)
pairs <- do.call("rbind", pairs_l)
pairs
week_1.1 A B
week_1.2 B C
week_2 A B
week_3.1 A C
week_3.2 C B
該問題與匯總有關,其中按一定順序考慮了兩列:
library(plyr)
pairs_count <- ddply(pairs,.(X1, X2),nrow)
pairs_count
X1 X2 V1
1 A B 2
2 A C 1
3 B C 1
4 C B 1
請注意第3行和第4行。這些是棘手的,我想總結一下,以便最后:
X1 X2 V1
1 A B 2
2 A C 1
3 B C 2
我嘗試了多種匯總/匯總策略,但都失敗了。
什么是結局? 我想使用igraph
創建一個坐在一起的人的網絡,為此,數據需要采用類似於(隨機示例)的格式:
> from to weight type
> 1 s01 s02 10 hyperlink
> 2 s01 s02 12 hyperlink
> 3 s01 s03 22 hyperlink
> 4 s01 s04 21 hyperlink
> 5 s04 s11 22 mention
> 6 s05 s15 21 mention
或作為鄰接矩陣。
您可以使用dplyr
做到這dplyr
。 我不得不更改您的職能以禁止因素。 然后,我使用pmin
和pmax
創建一個密鑰,並summarise
以下新數據:
events <- list()
events[["week_1"]] <- c("A", "B", "C")
events[["week_2"]] <- c("A", "B")
events[["week_3"]] <- c("A", "C", "B")
createPairs <- function(x){
data.frame(cbind(x[-length(x)], x[-1]), stringsAsFactors=FALSE) #changes
}
pairs_l <- lapply(events, createPairs)
pairs <- do.call("rbind", pairs_l)
pairs %>%
rowwise() %>%
mutate(key = paste0(pmin(X1, X2), pmax(X1, X2), sep = "")) %>%
group_by(key) %>%
summarise(X1=min(X1, X2),X2=max(X1, X2),total.count=n())
key X1 X2 total.count
<chr> <chr> <chr> <int>
1 AB A B 2
2 AC A C 1
3 BC B C 2
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.