首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >查找vars的唯一组合,如果找到唯一的组合,则创建一个新var。

查找vars的唯一组合,如果找到唯一的组合,则创建一个新var。
EN

Stack Overflow用户
提问于 2017-10-04 13:08:58
回答 3查看 115关注 0票数 1

我以这个dataframe作为玩具例子

代码语言:javascript
复制
aski = data.frame(A = c("x","y","z","x","z","z"),
                  B = c("a","b","c","a","b","c"))

现在我想检查A和B的每个唯一组合,如果这是一个唯一的组合,我想在数据中创建一个新变量并每次递增(例如r1,r2,.)发现了一种独特的梳子。

输出数据,如下所示

代码语言:javascript
复制
aski2 = data.frame(A = c("x","y","z","x","z","z"),
                   B = c("a","b","c","a","b","c"),
                   output = c("r1","r2","r3","r1","r4","r3"))
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-10-04 13:26:09

试试这个:

代码语言:javascript
复制
aski2 <- data.frame(A = c("x","y","z","x","z","z"),
                    B = c("a","b","c","a","b","c"))
ref <- do.call(paste, aski2)
aski2$output <- paste("r", as.numeric(factor(ref, levels = unique(ref))),
                      sep = "")
aski2
票数 3
EN

Stack Overflow用户

发布于 2017-10-04 13:44:13

另一个选项是使用group_indices;Group列A和B,它为每个组生成一个唯一的id (参见?group_indices):

代码语言:javascript
复制
aski2 <- data.frame(A = c("x","y","z","x","z","z"), 
                    B = c("a","b","c","a","b","c"), 
                    C = c("s","v","g","v","g","d"))

aski2 %>% mutate(output = sprintf("r%s", group_indices(., A, B)))

#  A B C output
#1 x a s     r1
#2 y b v     r2
#3 z c g     r4
#4 x a v     r1
#5 z b g     r3
#6 z c d     r4
票数 1
EN

Stack Overflow用户

发布于 2017-10-04 13:56:45

一种选择是.GRP

代码语言:javascript
复制
library(data.table)
setDT(aski2)[, output := paste0("r", .GRP), .(A, B)]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46565744

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档