我们得到一个矢量,如下:
x <- c(1,2,1,5,2,1,2,5,1)
我们需要的是data.frame
说y
行数等于length(x)
,列数等于length(unique(x))
,这意味着每个唯一项目中有一列x
y[i,j]==TRUE
i
当且仅当x
的{{1}}元素是j
的{{1}}唯一项目时({1}}列x
):
j
执行此操作的简单方法是:
y <- data.frame("1"=x==1, "2"=x==2, "5"=x==5, check.names=F)
你有更好的想法(即特定的功能)吗?
答案 0 :(得分:3)
如何使用outer
?
outer( x , unique(x) , `==` )
# [,1] [,2] [,3]
# [1,] TRUE FALSE FALSE
# [2,] FALSE TRUE FALSE
# [3,] TRUE FALSE FALSE
# [4,] FALSE FALSE TRUE
# [5,] FALSE TRUE FALSE
# [6,] TRUE FALSE FALSE
# [7,] FALSE TRUE FALSE
# [8,] FALSE FALSE TRUE
# [9,] TRUE FALSE FALSE
显然,完成这一切将会像这样包装......
setNames( data.frame( outer( x , unique(x) , `==` ) ) , unique( x ) )
答案 1 :(得分:3)
如果您可以使用二进制表示而不是数据的逻辑表示,我只会使用table
:
y <- table(seq_along(x), x)
要获得data.frame
,请使用as.data.frame.matrix
:
as.data.frame.matrix(y)
# 1 2 5
# 1 1 0 0
# 2 0 1 0
# 3 1 0 0
# 4 0 0 1
# 5 0 1 0
# 6 1 0 0
# 7 0 1 0
# 8 0 0 1
# 9 1 0 0