Re-arrange multiple columns in a data set into one column using R

人盡茶涼 提交于 2019-12-03 02:48:42

Using mydf from your example:

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

Stack the data:

sdf <- stack(mydf)

Then compute the unique elements using unique()

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

and then this will get them a new animal id

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

which would give:

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

However that is totally trivial; seq_along(uni) gets you there far more easily. So I wonder if you want

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

which gives:

> 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

There is an amount of ambiguity in your Question which could be alleviated by giving an expected result/output.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!