我需要特定格式的data.frame进行社会结构分析.如何转换包含多个事件上一起出现的个人列表的data.frame:
my.df <- data.frame(individual = c("A","B","C","B","C","D"),
time = rep(c("event_01","event_02"), each = 3))
individual time
1 A event_01
2 B event_01
3 C event_01
4 B event_02
5 C event_02
6 D event_02
Run Code Online (Sandbox Code Playgroud)
包含每对(包括[A,A]; [B,B]等对的出现的data.frame:
ind_1 ind_2 times
A A 0
A B 1
A C 1
A D 0
B A 1
B B 0
B C 2
B D 1
C A 1
C B 2
C C 0
C D 1
D A 0
D B 1
D C 1
D D 0
Run Code Online (Sandbox Code Playgroud)
在基数R中,您可以执行以下操作:
data.frame(as.table(`diag<-`(tcrossprod(table(my.df)), 0)))
# individual individual.1 Freq
# 1 A A 0
# 2 B A 1
# 3 C A 1
# 4 D A 0
# 5 A B 1
# 6 B B 0
# 7 C B 2
# 8 D B 1
# 9 A C 1
# 10 B C 2
# 11 C C 0
# 12 D C 1
# 13 A D 0
# 14 B D 1
# 15 C D 1
# 16 D D 0
Run Code Online (Sandbox Code Playgroud)
tcrossprod 为您提供以下内容:
> tcrossprod(table(my.df))
individual
individual A B C D
A 1 1 1 0
B 1 2 2 1
C 1 2 2 1
D 0 1 1 1
Run Code Online (Sandbox Code Playgroud)
这基本上是您正在寻找的所有信息,但您希望它以稍微不同的形式,没有对角线值.
我们可以将对角线设置为零:
`diag<-`(theOutputFromAbove, 0)
Run Code Online (Sandbox Code Playgroud)
然后,为了得到长形式,让R认为结果matrix是table通过使用as.table,并使用s 的data.frame方法table.
| 归档时间: |
|
| 查看次数: |
92 次 |
| 最近记录: |