1

我已经学习 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])
4

1 回答 1

2

首先,我不认为 single-personlist是适合您任务的数据结构。它们都具有相同的结构,这是一个data.frame合适的指标。

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

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

对于狩猎重复,看看? table


编辑:写。构建 a 的要求list:s 在 Rdata.frame中是s:list

> a <- data.frame (person = "John Doe", gender = "female")
> a
    person gender
1 John Doe female
> is.list (a)
[1] TRUE
于 2012-12-16T13:00:12.207 回答