我有以下类型的数据df <- data.frame(Group=rep(c("A", "B"), 3), var1 = rnorm(6)*100)
我希望通过将var1除以特定于每个组的数字来创建一个新变量。
我试过,df %>% mutate(var2 = case_when(Group == "A" ~ var1/100, Group == "B" ~ var1/120)),有什么建议用case_when或其他的apply函数族来进行数值计算吗?
发布于 2020-08-05 13:55:35
如果您的数据很大,我建议您创建一个映射表,其中包含每个组的因子:
mapping_factor <- tibble(Group = c("A", "B"), f = c(100, 120))然后,您可以简单地加入映射表,然后再进行除法:
df %>% left_join(mapping_factor, by = "Group") %>%
mutate(var2 = var1 / f)如果您的数据不是那么大,那么您就没有许多不同的Group属性,可以使用case_when。
df %>% mutate(var2 = var1 / case_when(Group == "A" ~ 100,
Group == "B" ~ 120))https://stackoverflow.com/questions/63266647
复制相似问题