查找值的所有ID

问题描述:

我有以下数据集查找值的所有ID

dts1 <- data.frame (id = c(1,2,3,2,1), transactionID =c ("A","","", "B","A")) 

我希望复制TRANSACTIONID的价值为所有这些

所以我想转换此:

id transactionID 
1 1    A 
2 2    
3 3    
4 2    B 
5 1    A 

id transactionID 
    1 1    A 
    2 2    B 
    3 3    
    4 2    B 
    5 1    A 

瓦ich是我的理想输出 因为在第二行中错过了id 2的transactionID,所以我将其替换了。

我想这

library(dplyr) 
dts1 %>% group_by(id) %>% mutate(transactionID = paste(transactionID, collapse="")) 

这给了我如下:

id transactionID 
    (dbl)   (chr) 
1  1   AA 
2  2    B 
3  3    
4  2    B 
5  1   AA 
+2

这不是一个很好的方法,但是你可以将'transactionID'换成'unique'来使其工作:'dts1%>%group_by(id)%>%mutate(transactionID = paste(unique(transactionID) =“”))' – alistaire

+0

谢谢alistair,我真的需要一个facepalm – MFR

我们可以使用data.table

library(data.table) 
setDT(dts1)[, transactionID := if(all(!nzchar(as.character(transactionID)))) transactionID 
     else transactionID[nzchar(as.character(transactionID))][1], by = id] 
dts1 
# id transactionID 
#1: 1    A 
#2: 2    B 
#3: 3    
#4: 2    B 
#5: 1    A 

随着基础R /匹配:

lookup <- unique(dts1[dts1$transactionID != '',]) 
dts1$transactionID <- lookup[match(dts1$id, lookup[,1]),2] 
dts1$transactionID[is.na(dts1$transactionID)] <- '' 

dts1 

    id transactionID 
1 1    A 
2 2    B 
3 3    
4 2    B 
5 1    A