r - 从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>
我猜它寻找值而不是字符串或错误。
非常感谢你的帮助!乙
解决方案
一种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="_"))
,这也会删除前面的列
推荐阅读
- java - 尝试在空对象引用上调用虚拟方法 'android.view.View android.widget.ImageView.findViewById(int)'
- python - 如何更改图表标题宽度以匹配 python-pptx 中的幻灯片宽度?
- vaultsharp - 令牌生命周期管理
- python - Python Scipy Interpolate Griddata - 如何在 Python 中从基于 griddata 的插值中提取 X、Y、Z 数据
- sql-server - 对于少数表,我在 SQL Server 中的插入速度很慢
- r - 将列名的所有组合对创建为data.frame中的行的有效方法
- java - 如何配置 Hikari 连接池以在连接返回池后重新创建连接?
- hive - 在 Hive 的 row_number() 中按窗口函数按顺序对分区进行自定义排序
- authentication - 在中心位置或组件中捕获错误
- macos - shell.openExternal 没有打开有效的 URL