r - 在整个数据帧上使用 ifelse()

我有一个如下所示的数据框:

dat <- data.frame(T1 = c('s', 's', 'm', 'l', 'm', 'xl'),
                  T2 = c('s', 's', 'm', 'l', 'm', 'xl'),
                  T3 = c('m', 's', 'm', 'l', 'l', 'xxl'), 
                  T4 = c('m', 'm', 'm', 'l', 'l', 'xxl'),
                  T5 = c('m', 'm', 'm', 'xl', 'l', 'xl'))

现在,我想将这些字符转换成数字(1-5)。有没有什么方法可以在几行中为整个数据框做到这一点。如果我必须为每一列和每个字符使用 ifelse() 语句,我会用掉很多行。提前谢谢你。

最佳答案

使用匹配:

dat[] <- match(unlist(dat), unique(unlist(dat)))

  T1 T2 T3 T4 T5
1  1  1  2  2  2
2  1  1  1  2  2
3  2  2  2  2  2
4  3  3  3  3  4
5  2  2  3  3  3
6  4  4  5  5  4

https://stackoverflow.com/questions/74374999/

相关文章:

java - 为什么 LocalDateTime.ofInstant() 需要 ZoneId

.net - Session.Timeout 和 Server.ScriptTimeout 有什么区

oop - 理解对象交互的一些技巧是什么

php - 静默捕获php "file_get_contents"错误

php - 如何在 PHP 中将数字转换为字母?

c# - 我如何编写介于两个值之间的 if 语句?

c - 为什么 putchar(1 +'0' ) 不输出 10?

php - 过滤消息的内容上的单词黑名单

amazon-ec2 - 一个 Amazon EC2 实例可以服务多少用户?

unit-testing - TDD 如何处理异常和参数验证?