【问题标题】:Re-arrange multiple columns in a data set into one column using R使用 R 将数据集中的多列重新排列为一列
【发布时间】:2011-09-13 08:39:25
【问题描述】:

我想将我的一个数据集中的三列合并为一个变量名称为“al_anim”的列,并删除所有重复项,将值(动物 ID)从最低到最高排序,并将每只动物从 1 重新编号到N在变量名“new_id”下。

 anim1 <- c(1456,2569,5489,1456,4587)
 anim2 <- c(6531,6987,6987,15487,6531)
 anim3 <- c(4587,6548,7894,3215,8542)
 mydf <- data.frame(anim1,anim2,anim3)

任何帮助将不胜感激!

巴兹

【问题讨论】:

    标签: r multiple-columns


    【解决方案1】:

    使用您示例中的mydf

    mydf <- data.frame(anim1, anim2, anim3)
    

    堆叠数据:

    sdf <- stack(mydf)
    

    然后使用unique()计算唯一元素

    uni <- unique(sdf[, "values"])
    

    然后这会给他们一个新的动物ID

    new_id <- as.numeric(as.factor(sort(uni)))
    

    这会给:

    > new_id
     [1]  1  2  3  4  5  6  7  8  9 10 11
    

    然而,这完全是微不足道的; seq_along(uni) 让您更轻松地到达那里。所以我想知道你是否想要

    newdf <- data.frame(anim = sort(uni), new_id = seq_along(uni))
    merge(sdf, newdf, by.x = "values", by.y = "anim")
    

    给出:

    > merge(sdf, newdf, by.x = "values", by.y = "anim")
       values   ind new_id
    1    1456 anim1      1
    2    1456 anim1      1
    3    2569 anim1      2
    4    3215 anim3      3
    5    4587 anim1      4
    6    4587 anim3      4
    7    5489 anim1      5
    8    6531 anim2      6
    9    6531 anim2      6
    10   6548 anim3      7
    11   6987 anim2      8
    12   6987 anim2      8
    13   7894 anim3      9
    14   8542 anim3     10
    15  15487 anim2     11
    

    您的问题存在一定的歧义,可以通过给出预期的结果/输出来缓解。

    【讨论】:

    • 感谢您的帮助和建议。下次我会改进的!再次感谢!
    • @baz 如果它回答了您的问题,那么请考虑接受它(答案左侧的大勾号)。这样,与您有相同或相似问题的人,以及遇到此问答的人都会知道问题已解决。更多信息在FAQ
    猜你喜欢
    • 2020-12-24
    • 1970-01-01
    • 2018-11-27
    • 1970-01-01
    • 2013-10-21
    • 1970-01-01
    • 2021-12-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多