r - R - 如何使用带有查找表的 tidyr/dplyr 在附加列中添加匹配数据
问题描述
我想使用查找表使用 tidyr/dplyr 函数添加带有附加数据的列。我找到了一些执行此操作的基本示例,但无法使其与我的数据一起使用,而且我并没有真正理解这些功能,因为响应没有解释正在发生的事情。
我想匹配此数据框中的 id 列:
>df
id sample_name fpkm conf_hi conf_lo quant_status
1 XLOC_000118 T1 33.857900 62.323300 5.3925000 OK
2 XLOC_000118 T2 169.793000 395.783000 0.0000000 OK
3 XLOC_000118 T3 41.869200 69.395700 14.3427000 OK
4 XLOC_009095 T1 1.472500 3.076350 0.0000000 OK
5 XLOC_009095 T2 3.828400 8.171850 0.0000000 OK
6 XLOC_009095 T3 1.806010 4.055220 0.0000000 OK
...到此查找表中的相同值并将name
值添加到匹配df
的新列中:lookupTable$name
df$id
>lookupTable
id name
1 XLOC_000118 Xy13
2 XLOC_009104 Xy3
3 XLOC_009105 Zy3
4 XLOC_009095 Xy6
5 XLOC_018501 Xy9
6 XLOC_020049 Xy35
我试图调整这个问题的代码,但收到错误:
df %>%
gather(key = "col") %>%
left_join(ObLookup, by = "id") %>%
spread(key = id, value = name)
Error: `by` can't contain join column `id` which is missing from LHS
In addition: Warning message:
attributes are not identical across measure variables;
they will be dropped
我自己想出了以下解决方案,它产生了我想要的结果,但我想知道是否有使用 tidyr 或 dplyr 的解决方案:
> df$names <- lookupTable$name[match(df$id, lookupTable$id)]
> df
id sample_name fpkm conf_hi conf_lo quant_status names
1 XLOC_000118 T1 33.857900 62.323300 5.3925000 OK Obp13
2 XLOC_000118 T2 169.793000 395.783000 0.0000000 OK Obp13
3 XLOC_000118 T3 41.869200 69.395700 14.3427000 OK Obp13
4 XLOC_009095 T1 1.472500 3.076350 0.0000000 OK Obp6
5 XLOC_009095 T2 3.828400 8.171850 0.0000000 OK Obp6
6 XLOC_009095 T3 1.806010 4.055220 0.0000000 OK Obp6
解决方案
我们可能需要在 中选择感兴趣的列,gather
然后在left_join
执行spread
library(tidyverse)
df %>%
gather(key, val, fpkm:conf_lo) %>%
left_join(lookupTable) %>%
spread(key, val)
# id sample_name quant_status name conf_hi conf_lo fpkm
#1 XLOC_000118 T1 OK Xy13 62.32330 5.3925 33.85790
#2 XLOC_000118 T2 OK Xy13 395.78300 0.0000 169.79300
#3 XLOC_000118 T3 OK Xy13 69.39570 14.3427 41.86920
#4 XLOC_009095 T1 OK Xy6 3.07635 0.0000 1.47250
#5 XLOC_009095 T2 OK Xy6 8.17185 0.0000 3.82840
#6 XLOC_009095 T3 OK Xy6 4.05522 0.0000 1.80601
推荐阅读
- swift - appcode 找不到 cocoapods 安装的类
- windows - ASP.NET Core 网站无响应
- vba - VBA 中的 MSXML 而不是 IE 产生运行时错误 91“对象变量或未设置块变量”
- php - Html / PHP - 更改图像重量以更快地加载
- java - Java中对象池设计模式的真实示例
- java - 如何以编程方式使我的操作系统崩溃?
- android - 从服务中的 FusedLocation 获取最后一个位置
- fortran - 无法使用 Mpi_File_Read 读取文件
- android - 如何获取双卡号码通话记录?
- angular - Angular - 从注册表单中保存数据