使用 case_when 进行数值计算
Numerical calculation using case_when
我有以下类型的数据
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
函数族进行数值计算的任何建议?
如果您的数据很大,我建议您创建一个映射 table,其中包含每个组的因子:
mapping_factor <- tibble(Group = c("A", "B"), f = c(100, 120))
然后你可以简单地加入映射table然后再除:
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))
我有以下类型的数据
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
函数族进行数值计算的任何建议?
如果您的数据很大,我建议您创建一个映射 table,其中包含每个组的因子:
mapping_factor <- tibble(Group = c("A", "B"), f = c(100, 120))
然后你可以简单地加入映射table然后再除:
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))