我有这样的数据框,称为df:
a b c d e f
b c f a a a
d f a b c c
f e d f f d
Run Code Online (Sandbox Code Playgroud)
第一行实际上是列名.让我们举个例子来解释这里的含义是:df[1,1]是b的,这意味着存在从关系a到b,所以在列中的值意味着从"列名",以该条目关系.
我想创建一个matrix(df1)6*6维,列和行名都是列名df.如果从"i"到"j"之间存在关系,则(i,j)条目为1,否则为0.
我想要的输出是:
a b c d e f
a 0 1 0 1 0 1
b 0 0 1 0 1 1
c 1 0 0 1 0 1
d 1 1 0 0 0 1
e 1 0 1 0 0 1
f 1 0 1 1 0 0
Run Code Online (Sandbox Code Playgroud)
如何在R中使用循环?
没有循环如何做到这一点,只使用基本的R?
如何使用R中的一些精美包装?
使用reshape2包,这是一种方法.我的示例数据将所有列都作为字符.您可以使用melt()长格式重塑数据.然后,您使用dcast()相同的包.
library(magrittr)
library(reshape2)
melt(mydf, measure.vars = names(mydf)) %>%
dcast(variable ~ value, length)
variable a b c d e f
1 a 0 1 0 1 0 1
2 b 0 0 1 0 1 1
3 c 1 0 0 1 0 1
4 d 1 1 0 0 0 1
5 e 1 0 1 0 0 1
6 f 1 0 1 1 0 0
Run Code Online (Sandbox Code Playgroud)
编辑
如下面akrun所述,您可以recast()在reshape2包中完成所有工作.
recast(mydf, measure.var= names(mydf),variable~value, length)
Run Code Online (Sandbox Code Playgroud)
数据
mydf <- structure(list(a = c("b", "d", "f"), b = c("c", "f", "e"), c = c("f",
"a", "d"), d = c("a", "b", "f"), e = c("a", "c", "f"), f = c("a",
"c", "d")), .Names = c("a", "b", "c", "d", "e", "f"), class = "data.frame", row.names = c(NA,
-3L))
Run Code Online (Sandbox Code Playgroud)