我有這樣ř找到一個對一COLS連桿之間2
df <- data.frame(g1=c("x1","x2","x2","x3","x4"),
g2=c("y1","y1","y2","y3",NA),
stringsAsFactors = FALSE)
一個數據幀中的每一行表示一個特定的x被連接到相同行的一定的收率
我該如何找到有多少x和y是唯一鏈接的,不包括na?
就像在這種情況下,只有1個獨特的連接x3到y3。
謝謝。
我有這樣ř找到一個對一COLS連桿之間2
df <- data.frame(g1=c("x1","x2","x2","x3","x4"),
g2=c("y1","y1","y2","y3",NA),
stringsAsFactors = FALSE)
一個數據幀中的每一行表示一個特定的x被連接到相同行的一定的收率
我該如何找到有多少x和y是唯一鏈接的,不包括na?
就像在這種情況下,只有1個獨特的連接x3到y3。
謝謝。
有更好的方法來做到這一點,但這是有效的。
Df[sapply(Df2[,1], function(x) (sum(x == (d <- sapply(Df, substring, first = 2))[,2], na.rm=T)==1)&(sum(x == d[,1], na.rm=T)==1)),]
> g1 g2
x3 y3
你可以得到所有的配對與table()
tt <- do.call(table, Df)
,然後找到/匹配具有零在細胞的共同行中的其餘列這些細胞
uv <- arrayInd(which(rowSums(tt)[row(tt)] == 1 & colSums(tt)[col(tt)]==1 & tt>0), .dim=dim(tt))
現在提取這些單元格的名稱
cbind(rownames(tt)[uv[,1]], colnames(tt)[uv[,2]])
# [,1] [,2]
# [1,] "x3" "y3"
所以在這裏我們得到了X3,Y3配對您需要的形式您的樣品
當我明白你的問題,你看你的數據幀的行,其中的g1
值和g2
值都是唯一的。在R中可以與duplicated
功能檢查獨特的價值觀:
subset(df, !duplicated(g1) & !duplicated(g1, fromLast=TRUE) & !is.na(g1) &
!duplicated(g2) & !duplicated(g2, fromLast=TRUE) & !is.na(g2))
# g1 g2
# 4 x3 y3
也許你可以使用igraph
。如果在圖中x
和y
是唯一鏈接的,它們將不會連接到任何其他節點 - 因此該圖將具有clusters
。因此,目標是確定大小爲2的線索並提取節點名稱。
# extend your data a little to include another unique link
df <- data.frame(g1=c("x1","x2","x2","x3","x4","x7"),
g2=c("y1","y1","y2","y3",NA, "y8"),
stringsAsFactors = FALSE)
library(igraph)
g <- graph.data.frame(na.omit(df[,1:2]))
plot(g)
by(V(g)$name, clusters(g)$membership, as.character) [clusters(g)$csize==2]
#$`2`
#[1] "x3" "y3"
#$`3`
#[1] "x7" "y8"
編輯跟進評論
可以使用V(G)$顏色指定顏色(和其他屬性)的節點。您可以有條件地分配這些。
所以上色的節點用單鏈路不同
b <- by(V(g)$name, clusters(g)$membership, as.character) [clusters(g)$csize==2]
V(g)$color <- ifelse(V(g)$name %in% unlist(b), "red", "blue")
plot(g)
或者上色每個集羣不同
V(g)$color <- c("red", "blue", "green")[clusters(g)$membership]
plot(g)
看一看?V
,?clusters
和?plot.igraph
查看更多選項
這非常有趣。有沒有辦法將不同的顏色應用於那些一對一的對,不管是頂點填充還是邊界?謝謝@ user20650 – santoku 2014-09-11 12:30:53
@santoku;不客氣。請參閱編輯節點的着色 – user20650 2014-09-11 12:42:39