使用R将数据集中的多个列重新排列到一列中

时间:2011-09-13 08:39:25

标签: r multiple-columns

我想将我的一个数据集中的三列组合成一个变量名为“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)

非常感谢任何帮助!

巴兹

1 个答案:

答案 0 :(得分:16)

使用示例中的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

您的问题中存在一些含糊不清的内容,可以通过给出预期的结果/输出来缓解。