在数据框中,我有两列(名称是数字,因为表格是更宽的数据透视的结果)。我希望能够使用这些列来使用 mutate,但它无法使其工作。 这是数据。
df <- structure(list(Age_Band = c("20-30", "20-30", "30-40", "30-40",
"40-50", "40-50", "50-60", "50-60"), Gender = c("female", "male",
"female", "male", "female", "male", "female", "male"), `2012` = c(20881.9,
19962.1, 29710.85, 26187.4, 50536.05, 21359.3, 26447.65, 24520.95
), `2013` = c(20132.4, 17268.15, 22622.1, 21543.05, 39569.15,
15701.1, 21450.95, 21020.6)), class = c("tbl_df", "tbl", "data.frame"
), row.names = c(NA, -8L))
这是我试图运行的代码。创建一个具有差异的新列。
df %>%
mutate(difference = 2013 - 2012)
我假设它不起作用,因为列名是数字?还有其他方法吗?否则有没有办法在 dplyr 中重命名它们,因为我也找不到办法做到这一点。非常感谢任何帮助。谢谢。
我建议重命名它们,例如使用
rename_with
(或者,如果可以的话,首先避免创建它们)
library(dplyr)
df %>%
rename_with(~ if_else(grepl("^\\d+$", .x), paste0("var", .x), .x))
# A tibble: 8 × 4
Age_Band Gender var2012 var2013
<chr> <chr> <dbl> <dbl>
1 20-30 female 20882. 20132.
2 20-30 male 19962. 17268.
3 30-40 female 29711. 22622.
4 30-40 male 26187. 21543.
5 40-50 female 50536. 39569.
6 40-50 male 21359. 15701.
7 50-60 female 26448. 21451.
8 50-60 male 24521. 21021.
如果您必须使用数字,请通过使用
将它们视为符号来访问它们eval(as.name("2012"))
!!sym("2012")