我是相对较新的R,所以我很抱歉,如果我的职位是不明确的提前。我有这样一个数据框架:
mydata <- data.frame(Town=c("A“、"B”、"C“、"C")、Industry=c("A”、"B“、"F”、"A“、"C”、"B“、”G“、"B”、"G","T“、"A”、"C“、”F“)
我的真实数据集有5000条观测数据,400个城镇和90个行业。
mydata <- data.frame(Town=c("A","A","A","B","B","B","B","C","C","C", "C","C","C"),
Industry=c("A","B","F","A","C","B","G","B","G","F","A","C","F"))
Town Industry
1 A A
2 A B
3 A F
4 B A
5 B C
6 B B
7 B G
8 C B
9 C G
10 C T
11 C A
12 C C
13 C F
我想找出在同一地区至少与其他两个产业同时办公的产业组合,50%/超过50%的时间。如果确定了,我会想要独特的行业组合。
例如,如果工业A位于10个城镇,工业B和C位于这10个城镇中的5个,那么它们将被归类为一个集群,由A、B和C组成,最好是以数据帧形式与独特的组合相结合。
我试着做了一段时间,但我得到的最接近的是执行共现矩阵,但没有得到唯一的组合和计算的相关性是不一致的。我的真实数据集有5000个观测数据。
到目前为止我的尝试。
df2 <- crossprod(table(df[1:2]))
diag(df2)<- 0
df3<- melt(df2)
发布于 2020-05-15 21:08:00
第10行和第13行有什么区别?这也是一个距离问题,因为在你的例子中只有三个城镇,50%意味着1.5个城镇。假设数据是正确的,那么我们可以这样做:
n <- length(unique(mydata$Town)) # Number of Towns:
m <- as.matrix(n - dist(table(mydata[2:1])>0)^2) #number of cities they share in common
data.frame(as.table(m))[c(lower.tri(m) & m >= (0.5 * n)),]
Var1 Var2 Freq
2 B A 3 # B and A share 3 Town
3 C A 2 # C and A share 2 Towns
4 F A 2
5 G A 2
8 C B 2
9 F B 2
10 G B 2
15 G C 3
https://stackoverflow.com/questions/61827941
复制相似问题