R在Dataframe中包含字符串列表

时间:2017-05-11 15:04:16

标签: r list dataframe

我正在尝试为维基百科的用户创建由他们制作的每个编辑贡献和删除的单词的人工数据框,最终结果应如下所示:

Example of Dataframe

我创建了一些人工数据来构建这样的框架,但是我遇到了“添加标记”和“删除标记”变量的问题。

我认为将它们创建为列表列表将允许我将它们包含在数据框中,即使元素并不总是具有相同的长度。但显然事实并非如此。相反,R为每个单独的令牌创建一个变量。这是不可行的,因为它会产生数百万个变量。以下是一些示例代码:

a <- c(1,2,3)
e <- list(b = as.list(c("a","b")),c = as.list(c(1L,3L,5L,4L)),d = as.list(c(TRUE,FALSE,TRUE)))

DF <- cbind(a,e)
U <- data.frame(a,e)

我想这样:

Example of desired Frame

这在R中是否可以与数据帧一起使用(我已经尝试过解压缩答案但是它们要么是针对不同的问题,要么对我来说技术性太强)?非常感谢任何帮助!

3 个答案:

答案 0 :(得分:1)

如果您愿意使用library(tibble)

,您可以完全按照自己的意愿行事
library(tibble)

a <- c(1,2,3)
e <- list(b = as.list(c("a","b")),c = as.list(c(1L,3L,5L,4L)),d = as.list(c(TRUE,FALSE,TRUE)))

tibble(a,e)
# A tibble: 3 × 2
      a          e
  <dbl>     <list>
1     1 <list [2]>
2     2 <list [4]>
3     3 <list [3]>

tibbletbl_df的行为就像您习惯使用传统的data.frame一样,但允许您使用一些很好的额外功能,例如在列中存储各种长度的列表。

答案 1 :(得分:0)

我不认为你想要的是使用列表矢量(正如你在你的问题中所建议的那样)。这主要是因为您无法在R中创建列表向量(请参阅:How to create a vector of lists in R?

然而,一个选项(如果你真的想要一个data.frame)将强制一切都转换为一个角色(R中最灵活的类型)。这样的事可能适合你:

e <- c(paste0(c("a","b"),collapse=","), paste0(c(1L,3L,5L,4L), collapse = ","), paste0(c(TRUE,FALSE,TRUE), collapse = ","))
U <- data.frame(a,e, stringAsFactors = F)

U
#  a               e
#1 1             a,b
#2 2         1,3,5,4
#3 3 TRUE,FALSE,TRUE

然后您可以通过拆分来取消每个单元格的值。类似的东西:

strsplit(U$e, ",")

答案 2 :(得分:0)

感谢所有人的建议!我想我找到了一个更简单的解决方案。为了防止其他人在将来遇到类似的问题,我就这样做了:

a <- c(1,2,3)
b <- c("a","b")
c <- c(1L,3L,5L,4L)
d <- c(TRUE,FALSE,TRUE)
e <- list(b,c,d);e

DF <- data.frame(a,I(e));DF

I()inhibit function显然阻止了列表的转换,到目前为止,列的行为就像列表一样。然而,e列的类不是&#34; list&#34;但是&#34; AsIs&#34;。我不知道这是否会引起问题,如果有的话,我会更新这个答案!

修改

事实证明,有些函数不会将AsIs类作为输入。要将其转换回有用的字符串,您只需在每一行上使用unlist()。