【发布时间】:2015-05-08 21:33:38
【问题描述】:
从我之前的post 继续,现在我想按 ID 分组(仅适用于第 3 列)并计算列的中值(Point_B),然后用列中的每个值减去中值(Point_B)到其各自的组。 NA 仍应退回。
注意:我希望 ID 分组仅应用于 Point_B 列,而不是 Point_A,因为我想计算整个 Point_A 列的中值并用 Point_A 中的值减去它。
例如
ID <- c("A","A","A","B","B","B","C","C","C")
Point_A <- c(1,2,NA,1,2,3,1,2,NA)
Point_B <- c(1,2,3,NA,NA,1,1,1,3)
df <- data.frame(ID,Point_A ,Point_B)
+----+---------+---------+
| ID | Point_A | Point_B |
+----+---------+---------+
| A | 1 | 1 |
| A | 2 | 2 |
| A | NA | 3 |
| B | 1 | NA |
| B | 2 | NA |
| B | 3 | 1 |
| C | 1 | 1 |
| C | 2 | 1 |
| C | NA | 3 |
+----+---------+---------+
在我之前的帖子中提供的解决方案是在不按 ID 分组的情况下计算中位数。这里是
library(dplyr)
df %>%
mutate_each(funs(median=.-median(., na.rm=TRUE)), -ID)
期望的输出
+----+---------+---------+
| ID | Point_A | Point_B |
+----+---------+---------+
| A | -1 | -1 |
| A | 0 | 0 |
| A | NA | 1 |
| B | -1 | NA |
| B | 0 | NA |
| B | 1 | 0 |
| C | -1 | 0 |
| C | 0 | 0 |
| C | NA | 2 |
+----+---------+---------+
如何通过 ID 分组获取 Column3 中的值?
【问题讨论】: