r - 如何根据行条件创建列
问题描述
我有以下问题:
Shared_ID<-c(1,1,1,2,2,2,3,3,3,4,4,4,5,5,5)
Individual_ID<-c(11,12,13,21,22,23,31,32,33,41,42,43,51,52,53)
Individual_Con<-c(1,2,3,1,1,1,2,2,2,3,3,3,3,2,1)
table<-tibble(Shared_ID,Individual_ID,Individual_Con)
table
我正在寻找的是一种创建一个名为Shared_Con的新列的方法,其中:对于每个 Shared_ID 显示一个基于以下内容的数字:
Individual_Con==1 ~ 1
Individual_Con==2 ~ 2
Individual_Con==3 ~ 3
any combination of Individual_Con ~ 4
对我来说,这意味着如果Shared_ID 中的所有 Individual_Con 都等于 1,那么 Shared_Con 将为 1,最后一种情况是,如果每个 Shared_ID 至少有 2 个不同的 Individual_Con,那么 Shared_Con 将为 4
这是我想要的结果:
# A tibble: 15 x 4
Shared_ID Individual_ID Individual_Con Shared_Con
<dbl> <dbl> <dbl> <dbl>
1 1 11 1 4
2 1 12 2 4
3 1 13 3 4
4 2 21 1 1
5 2 22 1 1
6 2 23 1 1
7 3 31 2 2
8 3 32 2 2
9 3 33 2 2
10 4 41 3 3
11 4 42 3 3
12 4 43 3 3
13 5 51 3 4
14 5 52 2 4
15 5 53 1 4
我怎样才能轻松做到这一点?提前感谢您的帮助!
解决方案
我们可以通过'Shared_ID'进行分组,检查'Individual_Con'中不同元素的数量是否大于1然后返回4,否则返回Individual_Con
library(dplyr)
table %>%
group_by(Shared_ID) %>%
mutate(Shared_Con = if(n_distinct(Individual_Con) > 1) 4 else Individual_Con)
# A tibble: 15 x 4
# Groups: Shared_ID [5]
# Shared_ID Individual_ID Individual_Con Shared_Con
# <dbl> <dbl> <dbl> <dbl>
# 1 1 11 1 4
# 2 1 12 2 4
# 3 1 13 3 4
# 4 2 21 1 1
# 5 2 22 1 1
# 6 2 23 1 1
# 7 3 31 2 2
# 8 3 32 2 2
# 9 3 33 2 2
#10 4 41 3 3
#11 4 42 3 3
#12 4 43 3 3
#13 5 51 3 4
#14 5 52 2 4
#15 5 53 1 4
推荐阅读
- excel - 从具有相似名称的多个工作表中提取相同的数据点
- bash - if elif else 构造给出错误,尽管按预期工作
- java - 这个 smali 类会解密数据吗?它使用什么加密?
- intellij-idea - IntelliJ IDEA Ultimate Edition:关闭搜索窗口
- angular - 角度是否有组件的 forwardRef?
- java - 使用 ASCII 表的问题加密练习
- typescript - Angular 5 自定义输入管道在删除字符时失去焦点
- ios - 如何左/右对齐自定义 UITableView 单元格
- multithreading - 同步执行上下文的不确定性(又名“寄生”)
- javascript - 无法在反应中重定向