重塑dataframe并创建相似性矩阵
我有一个数据表,我尝试重塑它,但它不起作用,我如何做到这一点: 我有一个数据表:重塑dataframe并创建相似性矩阵,r,R,我有一个数据表,我尝试重塑它,但它不起作用,我如何做到这一点: 我有一个数据表: Name | Value ------------- Bob | 8,9,10 ------------ Mike | 2,3,4 ------------ Sandr| 5,6,7 我如何将其编入如下列表: Value | Name ------------- 2 | Mike 3 | Mike 4 | Mike 5 | Sandr 6 | Sandr 7 |
Name | Value
-------------
Bob | 8,9,10
------------
Mike | 2,3,4
------------
Sandr| 5,6,7
我如何将其编入如下列表:
Value | Name
-------------
2 | Mike
3 | Mike
4 | Mike
5 | Sandr
6 | Sandr
7 | Sandr
8 | Bob
9 | Bob
10 | Bob
然后将此列表制成一个矩阵,如:
2 3 4 5 6 7 8 9 10
-------------------
2 | 1 1 1 0 0 0 0 0 0
3 | 1 1 1 0 0 0 0 0 0
4 | 1 1 1 0 0 0 0 0 0
5 | 0 0 0 1 1 1 0 0 0
6 | 0 0 0 1 1 1 0 0 0
7 | 0 0 0 1 1 1 0 0 0
8 | 0 0 0 0 0 0 1 1 1
9 | 0 0 0 0 0 0 1 1 1
10| 0 0 0 0 0 0 1 1 1
您正在寻找的函数是
堆栈
和对比
data<-list(bob=c(8,9,10),mike=c(2,3,4),sandr=c(5,6,7))
as.data.frame(data)
价值观
18鲍勃
29鲍勃
310鲍勃
4.2迈克
5.3麦克
6.4迈克
7.5桑德尔
8.6桑德尔
9.7桑德尔
dfresr数据对象没有这些分隔符。那么它真的是data.table(这是一种特殊类型对象的特定名称),还是dataframe,还是仅仅是一个文本文件?好吧,但假设我有1000行,每个名称有100个值。我该怎么做呢?我无法列出列表中的每一行和每一个值column@SanthoshSubramanian同样的代码适用于数据帧。数据当我把list函数写成list(bob=c(8,9,10),mike=c(2,3,4),sandr=c(5,6,7))时,它就工作了,而不是当我写list(dataframe)时。我必须输入大量数据才能为每个名称键入每个值。@SanthoshSubramanian如果您的数据位于数据框中,则直接将其stack
。不要将数据框包装在列表中。
bob mike sandr
1 8 2 5
2 9 3 6
3 10 4 7
stack(data)
values ind
1 8 bob
2 9 bob
3 10 bob
4 2 mike
5 3 mike
6 4 mike
7 5 sandr
8 6 sandr
9 7 sandr
df<-stack(data)
contrasts(df$ind,contrasts=FALSE)[df$ind,df$ind]
bob bob bob mike mike mike sandr sandr sandr
bob 1 1 1 0 0 0 0 0 0
bob 1 1 1 0 0 0 0 0 0
bob 1 1 1 0 0 0 0 0 0
mike 0 0 0 1 1 1 0 0 0
mike 0 0 0 1 1 1 0 0 0
mike 0 0 0 1 1 1 0 0 0
sandr 0 0 0 0 0 0 1 1 1
sandr 0 0 0 0 0 0 1 1 1
sandr 0 0 0 0 0 0 1 1 1
im<-contrasts(df$ind,contrasts=FALSE)[df$ind,df$ind]
rownames(im)<-df$values
colnames(im)<-df$values
res <- read.table(text="Name | Value
Bob | 8,9,10
Mike | 2,3,4
Sandr| 5,6,7", header=TRUE, sep="|")
dres <- data.frame(Value= unlist( strsplit(as.character(res$Value), ",") )
, Name=rep(res$Name, each=3))
dres <- dres[order(as.numeric(as.character(dres$Value))), ]
dres
outer(sort(dres$Value), sort(dres$Value), FUN=function(x,y) dres[x, "Name"] == dres[y,"Name"] )
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9]
[1,] TRUE TRUE TRUE FALSE FALSE FALSE FALSE FALSE FALSE
[2,] TRUE TRUE TRUE FALSE FALSE FALSE FALSE FALSE FALSE
[3,] TRUE TRUE TRUE FALSE FALSE FALSE FALSE FALSE FALSE
[4,] FALSE FALSE FALSE TRUE TRUE TRUE FALSE FALSE FALSE
[5,] FALSE FALSE FALSE TRUE TRUE TRUE FALSE FALSE FALSE
[6,] FALSE FALSE FALSE TRUE TRUE TRUE FALSE FALSE FALSE
[7,] FALSE FALSE FALSE FALSE FALSE FALSE TRUE TRUE TRUE
[8,] FALSE FALSE FALSE FALSE FALSE FALSE TRUE TRUE TRUE
[9,] FALSE FALSE FALSE FALSE FALSE FALSE TRUE TRUE TRUE