我以这个dataframe作为玩具例子
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"))发布于 2017-10-04 13:26:09
试试这个:
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发布于 2017-10-04 13:44:13
另一个选项是使用group_indices;Group列A和B,它为每个组生成一个唯一的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发布于 2017-10-04 13:56:45
一种选择是.GRP
library(data.table)
setDT(aski2)[, output := paste0("r", .GRP), .(A, B)]https://stackoverflow.com/questions/46565744
复制相似问题