0
我有兩個數據幀。第一個包含一個包含ID和各種其他列的列,而另一個包含這些ID(ID到名稱)的映射信息。匹配數據幀之間的行並將其替換爲第二個數據幀中另一列中的值
我想用另一個數據框中的名稱替換第一個數據幀中的ID。
我能夠做到這一點
for(id in 1:nrow(df1)){
df1$X[df1$X %in% df2$ID[id]] <- df2$Name[id]
}
這工作,只要我沒有在映射文件中重複的ID,如本:
ID,Name
MSTRG.11187,gng7.S
MSTRG.11187,Novel
但這樣的情況不少。我認爲我以前的代碼將工作,如果我可以擺脫映射文件中包含單詞Novel的任何行。我只是在努力做到這一點。我曾經嘗試這樣做:
data = data %>% group_by(GeneID) %>% filter(!("Novel" %in% Gene_Name))
但具有不同名稱的重複的ID前面的例子,它就會與gng7.S擺脫行以及與小說擺脫了行。我想這樣做,但保持與gng7.S行,只有擺脫與小說行。
我在想這可能與group_by部分有關。
感謝,
小號
編輯:下面是一些例子dataframes
df1=data.frame(X=c("MSTRG.199","MSTRG.18989","MSTRG.8890","MSTRG.7767"))
df2=data.frame(ID=c("MSTRG.18989","MSTRG.18989","MSTRG.8890","MSTRG.7767", "MSTRG.199"),Name=c("gng7.S", "Novel", "Novel","cdc20", "Novel"))
請提供一個可重現的數據示例。有可能你可以在R中使用一些連接操作來避免for循環。 – www
data = data%>%group_by(Name)%>%filter(!(「Novel」%in%Gene_Name)) 這似乎是做映射文件的技巧,for循環正在工作,但它正在很長時間。 (文件長度爲60k +行)。 –