在r中的数据框中写一个列表作为元素

时间:2014-12-13 02:14:14

标签: r list

我想创建一个包含2列的空数据框,名为" ngrams"和" pred"。

df <- data.frame(nGrams=character(), pred = character(), stringsAsFactors=FALSE)

我需要列中的每个元素&#34; pred&#34;是一个单词的向量,但如果我初始化&#39; pred = list()&#39;数据框不会添加该列。

我试过

> pred
[1] "a"    "the"  "not"  "that" "to"   "an"  

df[nrow(df)+1, ] <- c("is", pred)

Error in matrix(value, n, p) : 
  (converted from warning) data length [7] is not a sub-multiple or multiple of the number of columns [2]

df[nrow(df)+1, ] <- c("the", list(pred))

Error in `[<-.data.frame`(`*tmp*`, nrow(df) + 1, , value = list("the",  : 
      (converted from warning) replacement element 2 has 6 rows to replace 1 rows

有人能告诉我这是怎样的正确方法吗?提前谢谢。

修改

我使用data.table

获得了解决方案
dt <- data.table(nGrams = my_ngrams, pred = list_pred)

其中list_pred是列表列表。但了解数据框架的正确方法仍然很好。

1 个答案:

答案 0 :(得分:0)

你可以尝试

 d1 <- data.frame(nGrams='the', pred=I(list(pred)))
 str(d1)
 #'data.frame': 1 obs. of  2 variables:
 #$ nGrams: Factor w/ 1 level "the": 1
 #$ pred  :List of 1
 # ..$ : chr  "a" "the" "not" "that" ...
 #..- attr(*, "class")= chr "AsIs"

或使用空数据框df

 df[nrow(df)+1,] <- list('is', list(pred))
 str(df)
 #'data.frame': 1 obs. of  2 variables:
 #$ nGrams: chr "is"
 #$ pred  :List of 1
 # ..$ : chr  "a" "the" "not" "that" ...

其中,

pred <- c('a', 'the', 'not', 'that', 'to', 'an')