【问题标题】:Extracting unique values from data frame using R使用 R 从数据框中提取唯一值
【发布时间】:2017-02-21 12:24:11
【问题描述】:

我有一个包含多列的数据框,我希望能够隔离其中两列并获得唯一值的总数...这是我的意思的一个示例:

假设我有一个数据框 df:

df<- data.frame(v1 = c(1, 2, 3, 2, "a"), v2 = c("a", 2 ,"b","b", 4))
df

  v1 v2
1  1  a
2  2  2
3  3  b
4  2  b
5  a  4

现在我要做的是仅提取两列上的唯一值。因此,如果我只对每一列使用 unique(),输出将如下所示:

> unique(df[,1])
[1] 1 2 3 a
> unique(df[,2])
[1] a 2 b 4

但这并不好,因为它只能找到每列的唯一值,而我需要两列的唯一值总数!例如,'a' 在两列中重复,但我只希望它计算一次。对于我需要的示例输出;想象一下列 V1 和 V2 像这样叠放在一起:

  V1_V2
1      1
2      2
3      3
4      2
5      a
6      a
7      2
8      b
9      b
10     4

V1_V2 的唯一值是:

   V1_V2
1      1
2      2
3      3
5      a
8      b
10     4

然后我可以使用 nrow() 来计算行数。 有什么想法可以实现吗?

【问题讨论】:

  • unique(unlist(df))?但要注意当你混合这样的类型时会发生强制。
  • unique(c(df[,1],df[,2] ))

标签: r dataframe unique


【解决方案1】:

试试这个:

unique(c(df[,1], df[,2]))

【讨论】:

    【解决方案2】:

    这很适合union

    data.frame(V1_V2=union(df$v1, df$v2))
    
    #  V1_V2
    #1     1
    #2     2
    #3     3
    #4     a
    #5     b
    #6     4
    

    【讨论】:

    • 这正是我想要做的......我必须有大约 15 行代码试图做你在 1 中取得的成就......谢谢!
    【解决方案3】:

    通用方法:

    uq_elem=c()
    for(i in 1:ncol(df))
    {
      uq_elem=c(unique(df[,i]), uq_elem)
      uq_elem=unique(uq_elem)
    }
    

    所有不同的元素都将位于:uq_elem

    【讨论】:

    • 虽然这段代码 sn-p 可以解决问题,including an explanation 确实有助于提高您的帖子质量。请记住,您是在为将来的读者回答问题,而这些人可能不知道您提出代码建议的原因。
    【解决方案4】:

    使用这种方法,无论您有多少列,您都可以获得唯一值:

    df2 <- as.vector(as.matrix(df))
    unique(df2)
    

    然后,只需使用length

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多