【发布时间】:2021-03-13 09:53:32
【问题描述】:
假设我有两个数据框,df1 和 df2。两个数据帧都有一个标识符id。我的目标是在此标识符上合并这些数据集,但我想匿名化id 列中的名称。但是,问题是我想分别对两个数据集这样做,因此对于 df1 和 df2 而不是直接在 df3 上(因为这很容易:只需用一些随机字符替换 id 列)
我认为我的解决方案需要看起来像这样。首先,我创建了一个单独的数据框,其中包含来自df1 和df2 的所有唯一ids。然后,我需要分配一些随机化,例如idxxxx,其中xxxx 是此单独数据框中每个id 的唯一编号。使用dplyr、gsub 或stringr 方法,我可以根据在此单独数据框中分配的值替换df1 和df2 中的ids。在此之后,我将合并两个数据集。
这里我有两个示例数据框,我尝试解决的问题,以及想要的结果。请注意,id 的数量对我来说并不重要(例如,John Terry 的 id0004 或 id0003 无关紧要,只要它在两个数据帧中始终如一地更改即可。
有人可以帮我解决这个问题吗?谢谢!
id <- c("John Williams", "John Terry", "Rick Fire", "Katie Blue", "Unknown")
row1 <- c("28", "17", "17", "29", "39")
df1 <- data.frame(id,row1)
id <- c("Frank Johnson", "John Terry", "Rick Fire", "Katie Blue")
row2 <- c("Purple", "Red", "Yellow", "Green")
df2 <- data.frame(id,row2)
df3 <- merge(df1, df2, all.x = TRUE, all.y = TRUE)
#My try
#Make separate data frame
id_df <- merge(df1, df2, all.x = TRUE, all.y = TRUE)
id_df <- subset(id_df,TRUE,select = c(id))
id_df$anonymous <- id_df %>% mutate(id = row_number()) #it would be nicer to have something like id0001
#Replace ids within df1 and df2 according to the id_df anonymous variable
library(stringr)
df1$id <- str_replace(df1$id, id_df$id, as.character(id_df$anonymous)) #replacement does not work
#desired result
#df1 row1
#id0003 28
#id0002 17
#id0005 17
#id0004 29
#id0006 39
#df2 row2
#id0001 Purple
#id0002 Red
#id0005 Yellow
#id0004 Green
#df3
#id #row1 #row2
#id0001 NA Purple
#id0002 17 Red
#id0003 28 NA
#id0004 29 Green
#id0005 17 Yellow
#id0006 39 NA
【问题讨论】: