【问题标题】:Compare more than 2 lists in R比较 R 中超过 2 个列表
【发布时间】:2012-12-16 12:37:42
【问题描述】:

我已经学习 R 编程语言一个月了,在列表和数据框方面有些困难。我不知道如何找到超过 2 个列表之间的交集。我创建了四个列表,其中包含姓名、性别、年龄、3 部最喜欢的电影、对联合国的支持、直系亲属的出生日期和月份:

x<- list("Corinna Neubach", "female", 24, list("Film1","Film2","Film3"), TRUE,list("31.05",  "19.12"))
z<- list("Yasmin Ritschl","female", 21, list("Film6","Film7","Film8"), TRUE, list("20.03", "10.12"))
a<- list("Stefan Braun", "male", 23, list("Film6","Film7","Film8"),TRUE,list("25.06", "15.12"))
y<- list("Melissa Okay", "female", 23, list("Film3","Film4","Film5"), TRUE,list("31.05", "10.12"))

我想检查四个列表中是否有任何共享的生日或姓名。 首先,我用“Reduce”编写了一个代码,但它没有给出我想要的解决方案。 然后,我用 intersect 进行了尝试,但我认为应该有一种更简单的方法来做到这一点

intersect(x[[6]],y[[6]])
intersect(x[1],y[1])
intersect(x[[6]],z[[6]])
intersect(x[1],z[1])
intersect(y[[6]],z[[6]])
intersect(y[1],z[1])
intersect(x[[6]],z[[6]])
intersect(x[1],z[1])
intersect(a[[6]],x[[6]])
intersect(a[1],x[1])
intersect(a[[6]],z[[6]])
intersect(a[1],z[1])
intersect(a[[6]],y[[6]])
intersect(a[1],y[1])

【问题讨论】:

  • 如果您一开始就使用正确的数据结构,您会发现编程会容易得多。在这里,您应该将所有数据存储在一个 data.frame 中。一列名称,一列性别等。
  • 你是对的,但问题是:在 R 中创建 4 个包含以下信息的列表:姓名、性别等。
  • 我希望部分功劳归功于做正确的事。祝你作业顺利。

标签: r


【解决方案1】:

首先,我不认为单人lists 是适合您任务的数据结构。它们都具有相同的结构,这表明data.frame 是合适的。

虽然data.frames 可以在其元素中包含列表,但您的数据建议将列表转换为规范化关系数据库的表。您可以将其映射到 R 中的 2 或 3 个 data.frames:

  • 人员数据
  • 最喜欢的 3 部电影:如果它们被订购(第 1、第 2、第 3 选择),您可以使用人员表的data.frame 列。如果没有,请将它们拉入一个额外的data.frame 与列人员和电影。
  • 对于亲属的出生日期,我想您的示例数据恰好为每个人提供了其中的 2 个。因此,将其拉入另一个 data.frame。

要寻找重复项,请查看? table


编辑:wrt。构建list:data.frames 的要求是 R 中的lists:

> a <- data.frame (person = "John Doe", gender = "female")
> a
    person gender
1 John Doe female
> is.list (a)
[1] TRUE

【讨论】:

  • 如果您使用数据框架和框架的关系数据库组织,库 sqldf 很可能对查找重复项以及在您的表(eh 数据框架)上执行其他 SQL 查询很有用
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-06
  • 2022-06-26
  • 1970-01-01
  • 1970-01-01
  • 2019-10-30
  • 1970-01-01
相关资源
最近更新 更多