将多个细胞组合成R中的一个细胞

时间:2014-03-28 12:38:04

标签: r database dataframe data.table

我想将值的向量组合成单个单元格,每个值当前在矩阵中保存为一行,其中值以逗号分隔。

我当前的代码会创建随机向量。

例如,

## Group 1
N <- 10

set.seed(06510)

grp1 <- t(replicate(N, sample(seq(1:4), 4, replace = FALSE)) )

结果看起来像

表1:

      [,1] [,2] [,3] [,4]
 [1,]    2    4    3    1
 [2,]    4    2    1    3
 [3,]    2    4    1    3
 [4,]    1    4    3    2
 [5,]    1    3    2    4
 [6,]    2    1    3    4
 [7,]    4    3    2    1
 [8,]    4    1    3    2
 [9,]    2    4    3    1
[10,]    1    4    2    3

但我希望结果如下:

表2:

        [,1] 
 [1,]  2,4,3,1
 [2,]  4,2,1,3
 [3,]  2,4,1,3
 [4,]  1,4,3,2
 [5,]  1,3,2,4
 [6,]  2,1,3,4
 [7,]  4,3,2,1
 [8,]  4,1,3,2
 [9,]  2,4,3,1
[10,]  1,4,2,3

我正在创建一个随机化表,每个单元格代表每个调查受访者的4个调查问题的排序。最终,我想创建多个列,如上所述,因此为每个随机化项保留4列将构成一个难以阅读的大型随机化表。

2 个答案:

答案 0 :(得分:2)

您的主要问题是您需要使用I()功能来保护list结构。你的第二个问题是你需要从list返回一个replicate()结构,它返回一个矩阵(因为你有一组相等长度的向量)。设置simplify = FALSE并记下转置操作t的位置....

grp1 <- replicate(N, t( sample(seq(1:4), 4, replace = FALSE ) ) , simplify = FALSE )

as.data.frame( I(grp1) )
#      I(grp1)
#1  2, 4, 3, 1
#2  4, 2, 1, 3
#3  2, 4, 1, 3
#4  1, 4, 3, 2
#5  1, 3, 2, 4
#6  2, 1, 3, 4
#7  4, 3, 2, 1
#8  4, 1, 3, 2
#9  2, 4, 3, 1
#10 1, 4, 2, 3

# And just to check...
sapply( as.data.frame( I(grp1) ) , mode )
I(grp1) 
 "list" 

但是,我不知道为什么这个更多对你有用,而不是普通的data.frame,或者甚至可能更好用于你的用例,{{1} } list

答案 1 :(得分:-1)

无论你做什么,你最终会得到character s,我希望你不会对此感到惊讶。

apply(grp1,1,paste,collapse=",")

为您提供 vector 结果。你可以把它变成这样的矩阵:

matrix(apply(grp1,1,paste,collapse=","),ncol=1)

请参阅?applyapply() 非常有用。