【问题标题】:Extending a dataset based on multiple IDs in a column基于列中的多个 ID 扩展数据集
【发布时间】:2017-10-19 21:40:37
【问题描述】:

这是一个数据争论的问题,一个查询的问题。我有一个数据集,每一行不代表 1 个样本,但包含一个包含 ID 列表的列。例如,您有 3 列:年龄、性别和 ID。你可以有一行:28, M, 'ID209,ID208'

有没有简单的方法来扩展这个数据集,使每个 ID 号有一行?我正在使用 R 或 Python。

【问题讨论】:

  • 是的,您必须提供数据样本以供我们帮助。如果您使用的是 R,请参阅 here for creating a reproducible example
  • R 解决方案:library(tidyverse); df %>% mutate(id = stringr::str_split(id, “,”)) %>% unnest(id)
  • 谢谢,unnest 确实是我一直在寻找的功能!

标签: python r data-science


【解决方案1】:

这可能不是最简洁的 Python 解决方案,但它应该可以帮助您入门。

这假设您已将行拆分为以下形式的列表:[age, sex, 'ids']。这段代码应该很容易修改以适合您的实际行格式,但这应该足以让您开始。

new_rows = []
for row in dataset:
    id1, id2 = row[2].split(',')
    new_rows.append([row[0], row[1], id1])
    new_rows.append([row[0], row[1], id2])

print(new_rows)

希望对你有帮助。

【讨论】:

    【解决方案2】:

    使用tidytext 的 R 解决方案。假设ids 列中的值以逗号分隔:

    library(tidytext)
    library(stringr)
    
    df1 <- data.frame(age = 28, 
                      sex = "M", 
                      ids = "ID209,ID208", 
                      stringsAsFactors = FALSE)
    
    df1 %>% 
      unnest_tokens(id, ids, token = str_split, pattern = ",", to_lower = FALSE)
    
        age sex    id
    1    28   M ID209
    1.1  28   M ID208
    

    【讨论】:

      猜你喜欢
      • 2020-02-19
      • 2021-03-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-25
      • 2021-09-23
      • 1970-01-01
      • 2021-09-12
      相关资源
      最近更新 更多