首页 > 解决方案 > 从R中的lookuptable替换字符串

问题描述

我有一个带有列表的 txt 文件:

name
Test_123
run_456
Test_789

我有另一个包含“ID”的查找表并给了我一个“盘子”

ID  plate
123 xxx
456 zzz
789 bbb

很想来这里

Test_xxx
run_zzz
Test_bbb

我当前的代码不能完全工作。要么得到<NA> 我猜它寻找值而不是字符串或错误。

非常感谢你的帮助!乙

标签: r

解决方案


一种tidyverse方法是:

library(tidyverse)

df1 %>%
  separate(name, c("name", "ID"), convert=TRUE) %>%
  left_join(df2, by="ID") %>%
  mutate(new_name = paste(name, plate, sep="_"))

使用:

df1 <- structure(list(name = c("Test_123", "run_456", "Test_789")),
                 .Names = "name", class = "data.frame", row.names = c(NA, -3L))

df2 <- structure(list(ID = c(123L, 456L, 789L), plate = c("xxx", "zzz", 
                                                          "bbb")), .Names = c("ID", "plate"), class = "data.frame", row.names = c(NA, 
                                                                                                                                  -3L))

注意:

  • separate(..., convert=TRUE)使用一些启发式方法将字符转换为整数。否则,您可以手动执行此操作:mutate(ID=as.integer(ID))
  • 您可以使用unite()(与 相反separate())而不是mutate(new_name = paste(name, plate, sep="_")),这也会删除前面的列

推荐阅读