【问题标题】:R code - restructure data, three columns of stacked data to rows [duplicate]R代码 - 重组数据,三列堆叠数据到行[重复]
【发布时间】:2016-08-23 13:29:43
【问题描述】:

在此示例数据中,三个人将 10 个项目分类为可变数量的组,并为每个组提供一个文本标签。 人员和标签是文本字段。下载并读入 R 时的项目 var 被读取为整数。项目变量实际上是分类数据,并为项目定义文本;测试的项目编号是一个很好的类比。标签、项目和人员可以按任何顺序排列,我通常按照您在此处看到的数据进行排序,以便进行目视检查。在这个例子中每个人有 10 个项目,在现实世界中通常有 100 个项目。每个人都有不同数量的标签。每个标签都有可变数量的项目。所有项目都与一个且只有一个标签相关联,并且所有项目(本例中为 1-10)为每个人出现一次,没有丢失数据。

人物组项

person_1 label_A 1

person_1 label_A 2

person_1 label_A 3

person_1 label_A 4

person_1 label_B 5

person_1 label_B 6

person_1 label_C 7

person_1 label_C 8

person_1 label_C 9

person_1 label_C 10

person_2 label_D 1

person_2 label_D 2

person_2 label_D 3

person_2 label_D 4

...为简洁起见省略其余行

我需要将数据重组为以下格式。每行是一个带有关联项目的标签变量,标签位于一行且仅一行。每个人都被重复多次,因为他们有独特的标签。我已经搜索了堆栈溢出,并使用 reshape 和 tidyr 进行了多次尝试,我能产生的最好的结果是一个矩形二进制矩阵,其中数据框中有 1 或 0,有一列用于人员和标签,然后 10 列标记为 1:10对于此示例中的每个项目值。我可以在 excel 中进行后期处理以获得我想要的东西,但宁愿在 R 中完成这一切,我需要列中的实际项目值,如此处所示。理想情况下,最大 ncol 对于 peson 和 label 将是一个,并且根据需要表示排序。 Person3,label_H 需要 7 col 的项目,因此这些列或其他行中可能有 NA 或 0。 任何帮助将不胜感激,我通常可以在 StackOverflow 上找到我需要的答案,这次我很难过。

人物组项目

person_1 label_A 1 2 3 4
person_1 标签_B 5 6
person_1 标签_C 7 8 9 10
person_2 标签_D 1 2 3 4
person_2 标签_E 5 6 7
person_2 标签_F 8 9 10
person_3 标签_G 1 2 3
person_3 label_H 4 5 6 7 8 9 10

【问题讨论】:

  • 你有没有尝试过?
  • 请展示您的尝试。

标签: r reshape reshape2 tidyr


【解决方案1】:

我不确定我是否完全理解了这个问题。最终你正在寻找这样的东西:

df <- read.table(header=TRUE, text=
"person group item
person_1 label_A 1
person_1 label_A 2
person_1 label_A 3
person_1 label_A 4
person_1 label_B 5
person_1 label_B 6
person_1 label_C 7
person_1 label_C 8
person_1 label_C 9
person_1 label_C 10
person_2 label_D 1
person_2 label_D 2
person_2 label_D 3
person_2 label_D 4")
df2 <- unique(df[-3])
split(df$item, list(df$person, df$group), drop=TRUE)
df2$L <- split(df$item, list(df$person, df$group), drop=TRUE)
df2

结果:

#> df2
#     person   group           L
#1  person_1 label_A  1, 2, 3, 4
#5  person_1 label_B        5, 6
#7  person_1 label_C 7, 8, 9, 10
#11 person_2 label_D  1, 2, 3, 4

【讨论】:

    猜你喜欢
    • 2020-11-12
    • 2019-04-11
    • 1970-01-01
    • 2021-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多