【问题标题】:Create New Fields from List Values从列表值创建新字段
【发布时间】:2015-10-28 04:23:12
【问题描述】:

我有一个如下形式的数据框,它有两个字段。 field1 是一个分类字段,只有两个值 TRUE 或 FALSE,field2 是一个列表。我想解析 field2 并在我的数据框中为字符列表中的每个唯一值创建新列。例如,我想从下面的数据中创建 3 个新列,这些列将是 Bas、ant 和 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))

【问题讨论】:

  • 你还能显示预期的输出吗?
  • 我添加了示例输出。我还编辑了我最初发布的示例数据。我想我的括号太多了。
  • 输出给了我错误。你能检查是否有一些额外的括号。示例数据现在也是一个列表。前一个是正确的,因为它是一个以列表为列的 data.frame。
  • 我猜library(qdapTools);!!(mtabulate(df1$field2)) 将是预期的输出。
  • 我在示例输入数据中添加了右括号。所以现在它是原始形式,感谢您的帮助。很抱歉造成混乱。

标签: r


【解决方案1】:

我们可以从library(qdapTools)使用mtabulate

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")

【讨论】:

    【解决方案2】:

    试试这个。

    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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-16
      • 1970-01-01
      • 1970-01-01
      • 2018-04-17
      • 1970-01-01
      • 2019-11-29
      • 2021-02-18
      • 1970-01-01
      相关资源
      最近更新 更多