我有一个下面表格的数据框,其中有两个字段。 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))
答案 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)