创建一个数据框,其中每个单元格是R中的向量

时间:2015-07-08 09:29:48

标签: r dataframe

我有以下数据:

data.frame("color" = c( c("red", "red"), c("red"), c("red","green") ), rownames=letters[1:3] )

我想把它变成一个具有以下结构的数据框:

   color 
a  c("red", "red")
b  c("red")
c  c("red", "green")

其中abc是rownames。

我上面的代码没有产生这个,所以我该如何创建这样的数据帧呢?

编辑: 如果我尝试将rownames设为:paste(“a”,0:2,sep =“”,collapse =','),我得到:

          color 
a0,a1,a2  c("red", "red")
a0,a1,a2  c("red")
a0,a1,a2  c("red", "green")

当我想要的是:

   color 
a0  c("red", "red")
a1  c("red")
a2  c("red", "green")

我怎样才能纠正这个问题?

2 个答案:

答案 0 :(得分:3)

您可以使用I功能并将您的矢量放在list

data.frame("color" = I(list(c("red", "red"), 
                            c("red"), 
                            c("red","green"))), 
           row.names=letters[1:3] )
#        color
# a   red, red
# b        red
# c red, green
str(.Last.value)
# 'data.frame': 3 obs. of  1 variable:
#  $ color:List of 3
#   ..$ : chr  "red" "red"
#   ..$ : chr "red"
#   ..$ : chr  "red" "green"
#   ..- attr(*, "class")= chr "AsIs"

或者,使用" data.table",您可以直接创建列表列(不包含I),但data.table不具有行名称,因此您需要将其添加为数据集中的列。

library(data.table)
data.table("color" = list(c("red", "red"), "red", c("red", "green")), 
           "rownames" = letters[1:3])
#        color rownames
# 1:   red,red        a
# 2:       red        b
# 3: red,green        c
str(.Last.value)
# Classes ‘data.table’ and 'data.frame':    3 obs. of  2 variables:
#  $ color   :List of 3
#   ..$ : chr  "red" "red"
#   ..$ : chr "red"
#   ..$ : chr  "red" "green"
#  $ rownames: chr  "a" "b" "c"

答案 1 :(得分:0)

使用单引号:

mydf <- data.frame(color = c( 'c("red", "red")', 'c("red")', 
'c("red","green")' ), row.names=letters[1:3] )

> mydf
         color
a  c("red", "red")
b         c("red")
c c("red","green")