![](/img/trans.png)
[英]How can I create a new column in a dataframe based on permutations of other columns?
[英]How to create a new column in a dataframe based on grouped permutations of another column
我有一个像这样的数据框:
df <- data.frame(grouping = c(rep("site1_1",9), rep("site2_1",9)),
var = c(rep("P", 3), rep("G", 3), rep("B",3),rep("P", 3), rep("B", 3), rep("G",3)),
order= c(rep(0, 3), rep(1, 3), rep(2,3),rep(0, 3), rep(1, 3), rep(2,3)))
grouping var order
1 site1_1 P 0
2 site1_1 P 0
3 site1_1 P 0
4 site1_1 G 1
5 site1_1 G 1
6 site1_1 G 1
7 site1_1 B 2
8 site1_1 B 2
9 site1_1 B 2
10 site2_1 P 0
11 site2_1 P 0
12 site2_1 P 0
13 site2_1 B 1
14 site2_1 B 1
15 site2_1 B 1
16 site2_1 G 2
17 site2_1 G 2
18 site2_1 G 2
我有一列代表唯一的ID,称为分组(不再重复)。 在每个分组中,我有3个变量(P,G和B)。 它们确实在分组中多次重复,如上所示。
顺序始终为P,G,B或P,B,G。 在一个组中,P始终为0,B / G始终为1或2。它们在一个组中永远不能为1和2,并且在组之间,B或G是1还是2是随机的。
我有一个订单栏来显示var在每个组中的顺序
我想添加一个新列,根据B是G之前还是B之前的标签来标记整个分组(P,B和G)。
这是一个如下所示的示例:
grouping var order label
1 site1_1 P 0 Gfirst
2 site1_1 P 0 Gfirst
3 site1_1 P 0 Gfirst
4 site1_1 G 1 Gfirst
5 site1_1 G 1 Gfirst
6 site1_1 G 1 Gfirst
7 site1_1 B 2 Gfirst
8 site1_1 B 2 Gfirst
9 site1_1 B 2 Gfirst
10 site2_1 P 0 Bfirst
11 site2_1 P 0 Bfirst
12 site2_1 P 0 Bfirst
13 site2_1 B 1 Bfirst
14 site2_1 B 1 Bfirst
15 site2_1 B 1 Bfirst
16 site2_1 G 2 Bfirst
17 site2_1 G 2 Bfirst
18 site2_1 G 2 Bfirst
我不清楚如何执行此操作。
使用dplyr我首先开始
df%>%group_by(grouping)%>%mutate(标签= .......
但是在此之后,我迷失了如何指定标签以P,B和G的顺序为条件,以及如何解释它们在每个组中重复多次的事实。
我去了这个交易所:
但由于我需要按分组列对它们进行分组,并且需要考虑每个变量中排列的不同数量(每个分组中可以包含3-15个P,B和G,因此),因此尚不清楚如何采用答案。
任何帮助是极大的赞赏。
library(tidyverse)
df %>%
group_by(grouping) %>%
mutate(label = paste0(substr(gsub("[^G|B]", "", paste(unique(var), collapse = "")), 1, 1), "first"))
使用dplyr
和ifelse
一种解决方案可以实现为:
library(dplyr)
df %>% group_by(grouping) %>%
mutate(label = ifelse(var[var!="P"][1] == "B","BFirst","GFirst" )) %>%
as.data.frame()
# grouping var order label
# 1 site1_1 P 0 GFirst
# 2 site1_1 P 0 GFirst
# 3 site1_1 P 0 GFirst
# 4 site1_1 G 1 GFirst
# 5 site1_1 G 1 GFirst
# 6 site1_1 G 1 GFirst
# 7 site1_1 B 2 GFirst
# 8 site1_1 B 2 GFirst
# 9 site1_1 B 2 GFirst
# 10 site2_1 P 0 BFirst
# 11 site2_1 P 0 BFirst
# 12 site2_1 P 0 BFirst
# 13 site2_1 B 1 BFirst
# 14 site2_1 B 1 BFirst
# 15 site2_1 B 1 BFirst
# 16 site2_1 G 2 BFirst
# 17 site2_1 G 2 BFirst
# 18 site2_1 G 2 BFirst
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.