2017-10-04 46 views
1

我有这样的数据帧作为玩具的例子寻找瓦尔的独特组合,并创建一个新的变种,如果发现了一个独特的组合

aski = data.frame(A = c("x","y","z","x","z","z"), 
        B = c("a","b","c","a","b","c")) 

现在我要检查A和B的每一个独特的组合,如果它独特的组合我想要在数据框中创建一个新变量并每次增加(例如r1,r2,...)一个唯一的组合。

输出数据帧像这样

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")) 

回答

3

试试这个:

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 
+0

,但如果有如果dataframe是这个'> aski2 < - data.frame(A = c(“x”,“y”,“z”,“x”),那么数据框中的其他变量“aski2” ,“z”,“z”), + B = c(“a”,“b”,“c”,“a”,“b”,“c”),C = c(“s” v “ ”G“,” v“,”g“,”d“))'。如何继续? – SumitArya

+0

我想查找唯一的组合只有A和B,请回答这个问题。我会将你的评论标记为回答然后 – SumitArya

+0

在这种情况下,你只需要使用列'A'和'B来计算'ref'对象'。这应该工作'ref < - do.call(paste,aski2 [,c(“A”,“B”)])' – ANG

1

另一种选择是使用​​;组通过柱,它生成一个唯一的ID对于每个组(见group_indices):

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 
0

一种选择是.GRP

library(data.table) 
setDT(aski2)[, output := paste0("r", .GRP), .(A, B)]