r - 如何根据值的实际顺序将数字转换为字母?

标签 r dplyr

我认为这应该是一个非常简单的问题,但我似乎无法找出答案。本质上,我想为列的值添加前缀,但不使用任何类型的条件语句。这可能吗?

即,我想要产生与

相同结果的东西
mtcars %>% 
  mutate(new_cyl = str_c(case_when(cyl == 6 ~ letters[1],
                                   cyl == 4 ~ letters[2],
                                   cyl == 8 ~ letters[3]), ") ", cyl))

但不使用 case_when 或任何其他条件。

我的预期输出会按照它们出现的顺序在列的值上附加一些东西(在本例中是字母)。这里看起来像:

enter image description here

最佳答案

您可以制作一个小型的前缀查找表。这样,您就知道您正在将 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/

相关文章:

r - 创建相关矩阵 p 值

regex - 区分引号 (") from backslash and quotation mark (\")

python - 计算 R 或 Python 中同一列中行值 A 和行值 B 的事件发生次数

r - Dplyr:生成多变量的摘要描述性统计表(标准误差和变异系数)

用固定值替换非对角线元素

r - 使用 for 循环将交易列表中的值放入稀疏矩阵中

R `dev.new()` 卡住

r - 根据单个 if 条件改变多列

r - 映射列并应用自定义函数

r - 如何在 R 中 dplyr::inner_join 多 tbls 或 data.frames