【问题标题】:Create a list of unique values from a column in multiple data frames in R从R中多个数据框中的列创建唯一值列表
【发布时间】:2014-05-27 21:15:46
【问题描述】:

假设我有 3 个数据框(df1、df2、df3)来解释汽车的颜色、年份和品牌。每个数据框都有一个名为“id”的列。并非每个数据帧中的所有 id 都匹配,但我想创建一个跨所有三个数据帧的唯一 id 列表。

 df1 looks like this:  

 id     color
 5A     black
 7T     green
 8Q     gold
 4D     white

 df2 looks like this:  

 id     make
 5A     BMW
 6N     Benz
 8Q     GM
 3G     Toyota

 df3 looks like this:  

 id     year
 5A     2003
 2B     2010
 8Q     1999
 4D     2007

这是制作 3 个数据框的代码:

 df1 <- data.frame(id=c("5A", "7T", "8Q", "4D"), color=c("black", "green", "gold", "white"))
 df2 <- data.frame(id=c("5A", "6N", "8Q", "3G"), make=c("BMW", "Benz", "GM", "Toyota"))
 df3 <- data.frame(id=c("5A", "2B", "8Q", "4D"), year=c(2003,2010,1999,2007))

我希望我的最终列表具有以下值:

 id
 5A
 7T
 8Q
 4D
 6N
 3G
 2B

我尝试使用 unique() 但这仅适用于一个向量?有什么想法吗?

【问题讨论】:

  • 这是您的最终目标还是中间步骤?如果是这样,解释整个任务可能有其他有效的答案..
  • @Sheila 如果建议的答案之一足够,请选择它作为答案!

标签: r dataframe


【解决方案1】:
unique(c(df1$id, df2$id, df3$id)) 

适用于数值。

unique(c(as.character(df1$id), as.character(df2$id), as.character(df3$id)))

将值作为字符返回,如果需要,您可以将它们操作回因数。

【讨论】:

  • 这也是我的第一个想法。但是,当我运行它时,我得到 [1] 2 3 4 1 你得到想要的输出了吗?
  • 哦,好电话。当我过去这样做时,我一直在使用数值。
  • 另一个问题可能是期望的最终目标是什么——如果希望最终结合 df1、df2 和 df3,则在更大的 dplyr::join-style 方法中可能不需要此步骤跨度>
【解决方案2】:

这可能是一种方法

lst <- list(df1, df2, df3)
unique(unlist(lapply(lst, function(x) unique(x[,1]))))

[1] 5A 7T 8Q 4D 6N 3G 2B
Levels: 4D 5A 7T 8Q 3G 6N 2B

【讨论】:

  • 如果它们已经在列表中,那就太好了;不确定建立一个列表是否值得。而且,你并不真正需要内在的独特性,你可以使用 '[[' 功能使事情变得更短:unique(unlist(lapply(lst, '[[', "id")))
猜你喜欢
  • 2021-01-22
  • 2023-02-23
  • 1970-01-01
  • 2019-01-10
  • 1970-01-01
  • 1970-01-01
  • 2021-09-11
  • 2014-01-06
  • 2018-03-04
相关资源
最近更新 更多