r - 是否有基于另一个因子值填充因子值的函数
问题描述
需要输出:(Unit_New基于Unit和ID)
> x
CD ID Unit Unit_New
1 1 222 EM EM
2 2 222 EM EM
3 3 555 NAM NAM
4 4 555 NAM NAM
5 5 555 GT NAM
6 6 777 GT EM
7 7 777 EM EM
8 8 999 EM EM
9 9 999 AO EM
10 10 111 AO AO
解决方案
我们可以利用“Unit_List”创建一个factor
基于levels
它的list
,然后选择first
level
删除未使用的levels
,按“ID”分组的
library(dplyr)
Unit_List = c("EM", "NAM", "AO")
x %>%
group_by(ID) %>%
mutate(Unit_New1 = levels(droplevels(factor(Unit, levels = Unit_List)))[1])
# A tibble: 10 x 5
# Groups: ID [5]
# CD ID Unit Unit_New Unit_New1
# <int> <int> <chr> <chr> <chr>
# 1 1 222 EM EM EM
# 2 2 222 EM EM EM
# 3 3 555 NAM NAM NAM
# 4 4 555 NAM NAM NAM
# 5 5 555 GT NAM NAM
# 6 6 777 GT EM EM
# 7 7 777 EM EM EM
# 8 8 999 EM EM EM
# 9 9 999 AO EM EM
#10 10 111 AO AO AO
数据
x <- structure(list(CD = 1:10, ID = c(222L, 222L, 555L, 555L, 555L,
777L, 777L, 999L, 999L, 111L), Unit = c("EM", "EM", "NAM", "NAM",
"GT", "GT", "EM", "EM", "AO", "AO"), Unit_New = c("EM", "EM",
"NAM", "NAM", "NAM", "EM", "EM", "EM", "EM", "AO")),
class = "data.frame", row.names = c("1",
"2", "3", "4", "5", "6", "7", "8", "9", "10"))
推荐阅读
- laravel - Laravel SQLSTATE[HY000] [1045] Access denied for user 'root'@'localhost' (using password: NO)
- java - 密码加密并存储在数据库中
- ios - 在 Firestore 数据库中使用的最合适的时间戳格式是什么?
- java - 使用 Postman 将消息发布到 Slack 频道
- php - 使用一个标签将数据传递到 2 个页面
- ios - 用于本地化目的的文本连接
- mysql - 获得多个条件下的多个计数
- syslog - rsyslog 是否支持循环日志文件?
- youtube-api - 如何以编程方式与用户列表(电子邮件地址)共享“列出”视频?
- javascript - 使用 JavaScript 向上滚动时如何禁用菜单显示