我有以下数据:
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")
其中a
,b
和c
是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")
我怎样才能纠正这个问题?
答案 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")