Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
重塑dataframe并创建相似性矩阵_R - Fatal编程技术网

重塑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桑德尔
df
resr数据对象没有这些分隔符。那么它真的是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