从列表值创建新字段

时间:2015-10-28 04:23:13

标签: r

我有一个下面表格的数据框,其中有两个字段。 field1是一个分类字段,只有两个值TRUE或FALSE,field2是一个列表。我想解析field2并在我的数据框中为字符列表中的每个唯一值创建一个新列。例如,我想从下面的数据创建3个新列,列将是Bas,ants和onal。我希望新列包含一个标志TRUE或FALSE,表示该行的field2值包含该字段命名的值。例如,新列Bas的第1行值为TRUE,列onal的第1行值为FALSE。在Python中,有一个名为getdummies的函数可以执行类似的操作。我不确定r中是否有等价物,我也不确定如何解析列表。任何提示都非常感谢。

示例数据:

structure(list(field1 = c("False", "TRUE"), field2 = list(
    c("Bas", "ants"), c("Bas", "onal"))), .Names = c("field1", 
"field2"), row.names = c(1904L, 1968L), class = "data.frame")

以下是我希望输出显示的示例:

structure(list(field1 = c(FALSE, TRUE), field2 = list(
    c("Bas", "ants"), c("Bas", "onal")), class = "factor"), Bas = c(TRUE, TRUE
), ants = c(TRUE, FALSE), onal = c(FALSE, TRUE)), .Names = c("field1", 
"field2", "Bas", "ants", "onal"), class = "data.frame", row.names = c(NA, 
-2L))

2 个答案:

答案 0 :(得分:1)

我们可以使用mtabulate

中的library(qdapTools)
library(qdapTools)
!!(mtabulate(df1$field2)) 
#      ants  Bas  onal
#[1,]  TRUE TRUE FALSE
#[2,] FALSE TRUE  TRUE

数据

df1 <- structure(list(field1 = c("False", "TRUE"),
field2 = list(c("Bas", 
"ants"), c("Bas", "onal"))), .Names = c("field1", "field2"),
row.names = c(1904L, 1968L), class = "data.frame")

答案 1 :(得分:0)

试试这个。

data<-structure(list(field1 = c("False", "TRUE"), field2 = c("Bas", "Bas"),field3=c("ants", "onal")), .Names = c("field1", 
"field2","field3"), row.names = c(1904L, 1968L), class = "data.frame")

library(reshape2)    
newdata <-melt(data,id.vars=c("field3","field2"))    
x<-acast(newdata, value~field3)    
y<-acast(newdata, value~field2)    
final=cbind(x,y)