如何用tidyr包的complete函数补全字母序列?
用tidyr::complete补全字母序列的方法
你有如下数据框:
df <- structure(list(x = c(1, 5, 6, 7, 8), y = c("a", "e", "f", "g", "h")), class = c("tbl_df", "tbl", "data.frame"), row.names = c(NA, -5L))
数据框预览:
x y <dbl> <chr> 1 1 a 2 5 e 3 6 f 4 7 g 5 8 h
使用tidyr::complete对数值型的x列补全序列可以正常运行:
df %>% complete(x = full_seq(min(x):max(x), 1))
运行结果:
x y <dbl> <chr> 1 1 a 2 2 NA 3 3 NA 4 4 NA 5 5 e 6 6 f 7 7 g 8 8 h
但直接对字符型的y列执行类似操作会报错:
df %>% complete(y = full_seq(min(y):max(y), 1))
解决方案
要补全字母序列,需要先将字符型字母转换为ASCII编码处理,再转回字符,具体操作如下:
- 用
utf8ToInt()获取y列首尾字母的ASCII码值 - 用
seq()生成该区间内的完整整数序列 - 用
intToUtf8()将整数序列重新转换为字母 - 将转换后的字母序列传入
complete()中完成补全
完整代码:
library(tidyr) library(dplyr) df %>% complete(y = intToUtf8(seq(utf8ToInt(min(y)), utf8ToInt(max(y)), 1)))
运行结果:
y x <chr> <dbl> 1 a 1 2 b NA 3 c NA 4 d NA 5 e 5 6 f 6 7 g 7 8 h 8
内容的提问来源于stack exchange,提问作者TarJae
相关产品推荐
相关产品推荐

