查找值的所有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
答
我们可以使用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
这不是一个很好的方法,但是你可以将'transactionID'换成'unique'来使其工作:'dts1%>%group_by(id)%>%mutate(transactionID = paste(unique(transactionID) =“”))' – alistaire
谢谢alistair,我真的需要一个facepalm – MFR