无法将列表转换为R中的因子

时间:2014-06-20 12:14:27

标签: r

我在创建数据的箱形图时遇到问题,因为我的一个变量是列表形式。 我正在尝试创建一个箱线图:

boxplot(dist~species, data=out)

并收到以下错误:

Error in model.frame.default(formula = dist ~ species, data = out) : 
invalid type (list) for variable 'species'

我没有成功地将'物种'强加成一个因素:

out[species]<- as.factor(out[[out$species]])

并收到以下错误:

Error in .subset2(x, i, exact = exact) : invalid subscript type 'list'

如何将“物种”列转换为可用于创建箱线图的因子?感谢。

编辑:

str(out)
'data.frame':   4570 obs. of  6 variables:
 $ GridRef         : chr  "NT73" "NT80" "NT85" "NT86" ...
 $ pred            : num  154 71 81 85 73 99 113 157 92 85 ...
 $ pred_bin        : int  0 0 0 0 0 0 0 0 0 0 ...
 $ dist            : num  20000 10000 9842 14144 22361 ...
 $ years_since_1990: chr  "21" "16" "21" "20" ...
 $ species         :List of 4570
..$ : chr "C.splendens"
..$ : chr "C.splendens"
..$ : chr "C.splendens"
.. [list output truncated]

1 个答案:

答案 0 :(得分:3)

很难想象你是如何将数据放到这个表单中的,但它看起来像是

out <- transform(out,species=unlist(species))

应该解决你的问题。

set.seed(101)
f <- as.list(sample(letters[1:5],replace=TRUE,size=100))
## need I() to make a wonky data frame ...
d <- data.frame(y=runif(100),f=I(f))
## 'data.frame':    100 obs. of  2 variables:
##  $ y: num  0.125 0.0233 0.3919 0.8596 0.7183 ...
##  $ f:List of 100
##   ..$ : chr "b"
##   ..$ : chr "a"
boxplot(y~f,data=d)  ## invalid type (list) ...
d2 <- transform(d,f=unlist(f))
boxplot(y~f,data=d2)