【发布时间】:2015-09-04 17:41:12
【问题描述】:
我有一个这样的数据框
ID <- c(101,101,101,102,102,102,103,103,103)
Pt_A <- c(50,100,150,20,30,40,60,80,90)
df <- data.frame(ID,Pt_A)
+-----+------+
| ID | Pt_A |
+-----+------+
| 101 | 50 |
| 101 | 100 |
| 101 | 150 |
| 102 | 20 |
| 102 | 30 |
| 102 | 40 |
| 103 | 60 |
| 103 | 80 |
| 103 | 90 |
+-----+------+
我想使用从 Pt_A 列计算的值创建 2 个新列。
df$Del_Pt_A <- NthRow(Pt_A) - 1stRow(Pt_A) grouped by ID, where n = 1,2,...n
df$Perc_Pt_A <- NthRow(Del_Pt_A) / 1stRow(Pt_A) grouped by ID, where n = 1,2,...n
这是我想要的输出
+-----+------+---------+-----------+
| ID | Pt_A | Del_Pt_A | Perc_Pt_A|
+-----+------+---------+-----------+
| 101 | 50 | 0 | 0 |
| 101 | 100 | 50 | 1.0 |
| 101 | 150 | 100 | 2.0 |
| 102 | 20 | 0 | 0 |
| 102 | 30 | 10 | 0.5 |
| 102 | 40 | 20 | 1.0 |
| 103 | 60 | 0 | 0 |
| 103 | 80 | 20 | 0.3 |
| 103 | 90 | 30 | 0.5 |
+-----+------+---------+-----------+
我目前在 MS Excel 中得到了想要的结果,但我想学习在 R 中做它以提高我的工作效率。我遇到了 dplyr、plyr、data.table 等软件包,但我无法使用它们解决它。有人可以帮我弄清楚如何解决这个问题。
【问题讨论】:
-
仅供参考,
NthRow(Del_Pt_A) / 1stRow(Pt_A)简化为NthRow(Pt_A)/1stRow(Pt_A) - 1。这就是您在下面的答案中看到它的原因。 -
谢谢@Frank,我现在注意到了。
标签: r dataframe data.table plyr dplyr