【问题标题】:Combining dataframe column values (categorical and numeric)组合数据框列值(分类和数字)
【发布时间】:2013-01-02 00:39:24
【问题描述】:

我有一个包含许多列的数据框(df),其中一些包含分类数据,另一些包含数字数据。我想将“d”列的值定义为两列(“a”和“b”)中的值的组合(一个带有分类数据,另一个带有数字数据)。

例如列“a”第 1 行具有分类数据值“h”,列“b”第 1 行具有数字数据值“76”。我希望列 'd' 第 1 行具有值 'h76'

任何帮助将不胜感激。

【问题讨论】:

  • 您能否编辑您的问题以包含您迄今为止尝试过的一些可重现的代码?否则,这不是一个问题,而是一个陌生人为你做这件事的请求(要求?)。

标签: r dataframe


【解决方案1】:

像这样:

df$d <- paste0(df$a, df$b)

如果和某些人一样,你不喜欢看到太多df$,你也可以这样做:

df <- transform(df, d <- paste0(a, b))

【讨论】:

    【解决方案2】:
    dfrm$d <- apply(dfrm, 1, paste0)
    

    如果某些数字列具有长十进制表示,这可能会产生不令人满意的结果。您真的应该发布一个可重现的示例,最好通过编辑您的问题并插入dput(head(datfrm)) 的输出来完成。

    【讨论】:

      【解决方案3】:

      你可以试试这个。

      mydatf$d <- factor(mydatf$a):factor(mydatf$b)
      

      例如

      a <- c('h','l','l','h','h')
      b <- 1:5
      
      factor(a):factor(b)
      
      1] h:1 l:2 l:3 h:4 h:5
      Levels: h:1 h:2 h:3 h:4 h:5 l:1 l:2 l:3 l:4 l:5
      

      这与其他答案非常不同,因为它必然会产生一个与字符变量相反的因子。这也是:稍后在建模公式中所做的部分介绍。例如,注意变量的级别是什么。这可能是最好的答案,也可能是一个糟糕的答案,这取决于您想要这个新变量的用途。此外,如果列 a 已经是一个因素,您可以将 factor(mydatf$a) 更改为 datf$adata.frame 对象中经常出现这种情况。

      【讨论】:

      • :interaction 相关,但后者将强制其参数为 factor。 test$new &lt;- interaction(test$a, test$b, drop=TRUE, sep='') 看起来很像 paste0 解决方案,但返回的是一个因子而不是字符。
      • 是的。这是一个很好的观点,也是另一种解决方案。我试图做的不是像其他人那样提供解决方案。提问者没有提供足够的信息来了解最佳解决方案。也许不应该使用drop = TRUE。如果不需要其他交互功能,则不应删除级别,并且 a 列已经是一个因素,那么我提出的最终将是最简洁的。
      【解决方案4】:

      约翰说服我将此作为单独的答案输入,即使它与他的答案高度相关。

      interaction(test$a, test$b, drop=TRUE, sep="", lex.order=TRUE)
      

      这将返回与以下相同的值:

      factor(paste0(test$a, test$b))
      

      (如果 test$a 是无序的,我认为因子水平也将是相同的顺序。)

      使用因子通常优于字符(但并非总是如此)。

      【讨论】:

        猜你喜欢
        • 2020-10-08
        • 1970-01-01
        • 1970-01-01
        • 2019-09-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多