r - Match dataframe 的列 value 到另一个,如果没有 match,旧的 value 保持原样

我有这样的 dataframe A:

Sample1 
Salmon    
Mouse    
Rooster   
Monkey

我的 dataframe B 如下所示:

Sample1 Sample2
    Rooster  Bird     
    Mouse    Rodent
    Salmon   Fish

我希望在我的最终 dataframe 中,通过比较两个文件的两列之间的 match 来分配 sample2 列。为此,我使用了以下命令:

final_df$Sample2<- dataframe_B$Sample1[match(dataframe_A$Sample1, dataframe_B$Sample2)]

该命令有效,但是当没有替代品时,例如这里的猴子,则返回 NA。如果没有 match,如何修改我的代码以便返回相同的 value(例如猴子)?我的真实数据集有数千行。谢谢

简而言之,我的最终 dataframe 如下所示,我不希望为 Monkey 显示 NA,我希望 Monkey 在那里。这只是数千行的示例,我希望将相同的应用于任何没有 match 的内容:

Sample1  Sample2
    Salmon    Fish     
    Mouse     Rodent
    Rooster   Bird
    Monkey     NA

回答1

我不确定您的问题是什么,但是 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

回答2

如果我理解正确,您可以像这样执行 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"))

回答3

如果

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)])

使用 which! 过滤掉不匹配的那个

您可以将其放入 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

相似文章

php - PHP telnet 解析 mysql table 的数据输出

大家好,我正在开发一个小项目并通过它学习php编码..但我被困在下面的一个新问题上..我正在使用PHPtelnet发送cmds并从设备获取数据回复..所以我发送了一个cmd来检查我正在使用下面的示例代...

随机推荐

最新文章