我有這樣的資料框A:
Sample1
Salmon
Mouse
Rooster
Monkey
我的資料框 B 如下所示:
Sample1 Sample2
Rooster Bird
Mouse Rodent
Salmon Fish
我希望在我的最終資料框中,通過比較兩個檔案的兩列之間的匹配來分配 sample2 列。為此,我使用了以下命令:
final_df$Sample2<- dataframe_B$Sample1[match(dataframe_A$Sample1, dataframe_B$Sample2)]
該命令有效,但是當沒有替代品時,例如這里的猴子,則回傳 NA。如何修改我的代碼,以便在不匹配的情況下回傳相同的值(例如猴子)?我的真實資料集有數千行。謝謝
簡而言之,我的最終資料框如下所示,我不想為 Monkey 顯示 NA,我希望 Monkey 在那里。這只是數千行的示例,我希望將相同的應用于任何沒有匹配的內容:
Sample1 Sample2
Salmon Fish
Mouse Rodent
Rooster Bird
Monkey NA
uj5u.com熱心網友回復:
我不確定你的問題是什么,但merge()對你有用嗎?
dataframe_A = data.frame(
stringsAsFactors = FALSE,
Sample1 = c("Salmon", "Mouse", "Rooster", "Monkey")
)
dataframe_B = data.frame(
stringsAsFactors = FALSE,
Sample1 = c("Rooster", "Mouse", "Salmon"),
Sample2 = c("Bird", "Rodent", "Fish")
)
dataframe_C = merge(
dataframe_A,
dataframe_B,
all.x = TRUE
)
dataframe_C$Sample2[is.na(dataframe_C$Sample2)] = dataframe_C$Sample1[is.na(dataframe_C$Sample2)]
dataframe_C
uj5u.com熱心網友回復:
如果我理解正確,你可以這樣做left_join:
library(dplyr)
df1 %>%
left_join(., df2, by = "Sample1")
輸出:
Sample1 Sample2
1 Salmon Fish
2 Mouse Rodent
3 Rooster Bird
4 Monkey <NA>
資料
df1 <- data.frame(Sample1 = c("Salmon", "Mouse", "Rooster", "Monkey"))
df2 <- data.frame(Sample1 = c("Rooster", "Mouse", "Salmon"),
Sample2 = c("Bird", "Rodent", "Fish"))
uj5u.com熱心網友回復:
如果
a <- data.frame(sample1 = c("Salmon", "Mouse", "Rooster", "Monkey"))
和
b <- data.frame(sample1 = c("Rooster", "Mouse", "Salmon"), sample2 = c("Bird", "Rodent", "Fish"))
然后
c <- c(a$sample1[match(b$sample1, a$sample1)], a$sample1[which(!a$sample1 %in% b$sample1)])
使用whichand! 過濾掉不匹配的那個
您可以將其放入 data.frame 中:
data.frame(c = c(a$sample1[match(b$sample1, a$sample1)], a$sample1[which(!a$sample1 %in% b$sample1)]))
c
1 Rooster
2 Mouse
3 Salmon
4 Monkey
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/474485.html
