我认为这应该是一个非常简单的问题,但我似乎无法找出答案。本质上,我想为列的值添加前缀,但不使用任何类型的条件语句。这可能吗?
即,我想要产生与
相同结果的东西mtcars %>%
mutate(new_cyl = str_c(case_when(cyl == 6 ~ letters[1],
cyl == 4 ~ letters[2],
cyl == 8 ~ letters[3]), ") ", cyl))
但不使用 case_when
或任何其他条件。
我的预期输出会按照它们出现的顺序在列的值上附加一些东西(在本例中是字母)。这里看起来像:
最佳答案
您可以制作一个小型的前缀查找表。这样,您就知道您正在将 cyl 值与其前缀正确匹配,而不是依赖于正确的数据顺序。然后将查找加入您的数据并粘贴。
library(dplyr)
lookup <- data.frame(
cyl = c(6, 4, 8),
prefix = letters[1:3]
)
如果您想根据 cyl
列的顺序创建前缀,而不是将 cyl
值硬编码到它们的前缀中,您可以创建查找表格更动态,例如:
lookup <- data.frame(
cyl = unique(mtcars$cyl),
prefix = letters[seq_along(unique(mtcars$cyl))]
)
# select is just to get extra columns out of the way to show here
mtcars %>%
select(cyl) %>%
left_join(lookup, by = "cyl") %>%
mutate(new_cyl = paste(prefix, cyl, sep = ") ")) %>%
head()
#> cyl prefix new_cyl
#> 1 6 a a) 6
#> 2 6 a a) 6
#> 3 4 b b) 4
#> 4 6 a a) 6
#> 5 8 c c) 8
#> 6 6 a a) 6
关于r - 如何根据值的实际顺序将数字转换为字母?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56244884/