我想将值的向量组合成单个单元格,每个值当前在矩阵中保存为一行,其中值以逗号分隔。
我当前的代码会创建随机向量。
例如,
## 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列将构成一个难以阅读的大型随机化表。
答案 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)
请参阅?apply
。 apply()
非常有用。