将向量转换为data.frame,每个唯一值一列

时间:2013-12-04 11:21:35

标签: r vector matrix indexing dataframe

我们得到一个矢量,如下:

x <- c(1,2,1,5,2,1,2,5,1)

我们需要的是data.framey行数等于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)

你有更好的想法(即特定的功能)吗?

2 个答案:

答案 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