【发布时间】:2022-11-03 16:03:50
【问题描述】:
如果您先查看代码,则更容易解释我想要做什么,但基本上我想我想在一个条件下使用 lapply 但我无法做到。
library("tidyverse")
names <- rep(c("City A", "City B"), each = 11)
year <- rep(c(2010:2020), times = 2)
col_1 <- c(1, 17, 34, 788, 3, 4, 78, 98, 650, 45, 20,
23, 45, 56, 877, 54, 12, 109, 167, 12, 19, 908)
col_2 <- c(3, 4, 23, 433, 2, 45, 34, 123, 98, 76, 342,
760, 123, 145, 892, 23, 5, 90, 40, 12, 67, 98)
df <- as.data.frame(cbind(names, year, col_1, col_2))
df <- df %>%
mutate(col_1 = as.numeric(col_1),
col_2 = as.numeric(col_2))
我希望 2018 年及以后的每个数字列都用 round_any 舍入为三的倍数 (plyr::round_any, 3) 我尝试的是这样的:
df_2018 <- df %>%
filter(year >= 2018)
df <- df %>%
filter(!(year >= 2018))
df_2018[, c(3:4)] <- lapply(df_2018[, c(3:4)], plyr::round_any, 3)
df <- rbind(df, df_2018)
实际上,大约有 50 个数字列和大量行。我尝试过的理论上可行,但我想用更少的代码和更清洁的方式来实现它。 我是使用 lapply 的新手,但我没有尝试将它与 ifelse 结合起来,因为我不希望它改变我的年份列。
感谢所有抽出时间来看看这个的人:)
【问题讨论】:
标签: r conditional-statements lapply