【发布时间】:2019-07-19 03:55:12
【问题描述】:
这是我拥有的数据框:
df <- data.frame(
id = c(1,2,3,4,5),
a_1_area = c(3,10,4,0,15),
a_2_area = c(2,1,1,0,3),
a_3_area = c(12,3,0,3,1),
a_4_area = c(9,7,8,0,0),
a_5_area = c(1,2,0,2,2)
)
在df中添加自定义范围以在ggplot2中绘制barplot:
df %>% mutate(a_1_range=case_when(
a_1_area == 0 ~ "0",
a_1_area >= 1 & a_1_area < 5 ~ "1-4",
a_1_area >= 5 & a_1_area <10 ~ "5-9",
a_1_area >= 10 & a_1_area <15 ~ "10-14",
a_1_area >= 15 ~ "15-",
TRUE ~ "999")
)
输出:
id a_1_area a_2_area a_3_area a_4_area a_5_area a_1_range
1 1 3 2 12 9 1 1-5
2 2 10 1 3 7 2 6-10
3 3 4 1 0 8 0 1-5
4 4 0 0 3 0 2 0
5 5 15 3 1 0 2 11-15
我继续这个操作到剩下的列; a_2_area,a_3_area,a_4_area 和 a_5_area 使用 for 循环。
for (i in 1:5) {
df %>% mutate(!!colname[i]:=case_when(
!!sym(varname[i]) == 0 ~ "0",
!!sym(varname[i]) >= 1 & !!sym(varname[i]) < 5 ~ "1-4",
!!sym(varname[i]) >= 5 & !!sym(varname[i]) <10 ~ "5-9",
!!sym(varname[i]) >= 10 & !!sym(varname[i]) <15 ~ "10-14",
!!sym(varname[i]) >= 15 ~ "15-",
TRUE ~ "999")) -> df
}
输出:
id a_1_area a_2_area a_3_area a_4_area a_5_area a_1_range a_2_range a_3_range a_4_range
1 1 3 2 12 9 1 1-4 1-4 10-14 5-9
2 2 10 1 3 7 2 10-14 1-4 1-4 5-9
3 3 4 1 0 8 0 1-4 1-4 0 5-9
4 4 0 0 3 0 2 0 0 1-4 0
5 5 15 3 1 0 2 15- 1-4 1-4 0
a_5_range
1 1-4
2 1-4
3 0
4 1-4
5 1-4
另一方面,可能有可能在purrr 中使用map 执行相同的操作;但是我仍然无法将其应用于动态变量。您对此有什么建议吗?
【问题讨论】:
标签: r dictionary dplyr purrr