r - 创建一个以采用不同行的值为条件的变量
问题描述
创建一个以采用不同行的值为条件的变量。例如。我有一个数据库,由 3 个变量组成。(ID、COD1、COD2)。
ID代表识别码。COD1:代表每个个体所属的类别。COD2:代表注册表特征。
我们要创建一个变量 3:COD3,它表示个人属于多少 COD1 类别。
COD3 = A 如果相同的 ID 在 COD1 中有 2 个类别
COD3 = B 如果相同的 ID 在 COD1 中有 3 个类别
COD3 = C 如果相同的 ID 在 COD1 中只有一个类别
我正在考虑使用 dplyr 的代码,如下所示,但我不知道如何制作不仅考虑行而且考虑整个组的条件。
df %>% mutate(COD3 = case_when(ID == 1 & COD2 == ?? ~ A)
我有的。
ID | COD1 | COD2 |
---|---|---|
01 | 10 | 1SW |
01 | 11 | 232 |
01 | 10 | 12D |
02 | 10 | 13V |
02 | 11 | 2P0 |
02 | 12 | PL4 |
03 | 10 | 55R |
03 | 10 | P01 |
03 | 10 | MN7 |
我想要的是
ID | COD1 | COD2 | COD3 |
---|---|---|---|
01 | 10 | 1SW | 一个 |
01 | 11 | 232 | 一个 |
01 | 10 | 12D | 一个 |
02 | 10 | 13V | 乙 |
02 | 11 | 2P0 | 乙 |
02 | 12 | PL4 | 乙 |
03 | 10 | 55R | C |
03 | 10 | P01 | C |
03 | 10 | MN7 | C |
我将不胜感激在这方面的任何帮助。
解决方案
library(dplyr)
df %>%
group_by(ID) %>%
mutate(COD3 = c("C", "A", "B")[n_distinct(COD1)]) %>%
ungroup()
或者在基地R
df$COD3 <- unlist(lapply(with(df, split(COD1, ID)), function(x) c("C", "A", "B")[rep(length(unique(x)), length(x))]))
输出
ID COD1 COD2 COD3
<int> <int> <chr> <chr>
1 1 10 1SW A
2 1 11 232 A
3 1 10 12D A
4 2 10 13V B
5 2 11 2P0 B
6 2 12 PL4 B
7 3 10 55R C
8 3 10 P01 C
9 3 10 MN7 C
推荐阅读
- jquery - Jquery从数据函数中获取父元素
- php - htaccess 接受 localhost/demo/index/
- python - 对 JSON 文件中的组进行排序
- visual-studio-code - preLaunch 询问“未定义”以退出代码 1 终止
- javascript - 如何使用 mongodb 在对象内迭代数组
- angular - 使 CanActivate 等待 Subject 计算
- powershell - “Windows Powershell 兼容性(.net 标准 2.0)”是什么意思?
- ios - 从我的 iOS 应用程序在 Twitter 上分享时出错
- firebase - 如何禁用 Cloud Firestore?
- sapui5 - 最佳实践,因此在运行时在网格和列表布局之间切换