假设我有一个如下数据框
people.dat <- data.frame("ID" = c(2001, 1001, 2005, 2001 5000), "Data"
= c(100, 300, 500, 900, 200))
看起来像这样
+------+------+
| ID | Data |
+------+------+
| 2001 | 100 |
| 1001 | 300 |
| 2005 | 500 |
| 2001 | 900 |
| 5000 | 200 |
+------+------+
假设我要做的第一件事是计算出数据框中有多少个唯一ID值(由于所涉及的实际数据集的大小,这是必需的)
unique_ids <- sort(c(unique(people.dat$ID)))
哪个给
[1] 1001 2001 2005 5000
我遇到的麻烦是,我想添加一个新列,例如“ new_id”,它查看数据框中的“ ID”值,并评估其在unique_ids中的位置,然后分配位置值(因此,“ new_id”由每一行的值组成,范围为1:length(unique_ids)
输出示例如下
+------+------+--------+
| ID | Data | new_id |
+------+------+--------+
| 2001 | 100 | 2 |
| 1001 | 300 | 1 |
| 2005 | 500 | 3 |
| 2001 | 900 | 1 |
| 5000 | 200 | 4 |
+------+------+--------+
我考虑过使用带if语句的for循环,但是我的第一次尝试并没有达到目标。虽然,如果我只想用一个顺序值替换“ ID”,则以下代码将起作用(但我遇到的困难是我想保留ID,但要添加另一个“ new_id”列)
for (i in 1:48){
people.dat$ID[people.dat$ID == unique_ids[i]] <- i
}
感谢您的帮助。希望我已经尽可能清楚地说明了这个问题(尽管我很难说出一些问题,所以请让我知道是否有任何需要澄清的具体问题)
答案 0 :(得分:0)
这更像是'rank'
问题
people$rank=as.numeric(factor(people$ID))
people
ID Data rank
1 2001 100 2
2 1001 300 1
3 2005 500 3
4 2001 900 2
5 5000 200 4