r - 使用从另一个表索引的值创建新列
问题描述
我有两张桌子:
表格1:
Var1 Var2
01-01 dhold_1
01-01 dhold_2
01-01 dhold_3
02-01 dhold_1
02-01 dhold_2
03-01 dhold_3
表2:
md dhold_1 dhold_2 dhold_3
01-01 1.01 1.05 1.04
02-01 1.03 0.09 0.99
我想在 table1 中创建一个新列,我们称之为Var3
。新列应包含表 2 中的相应值。我想您在查看最终结果时应该知道我的意思:
添加新列(目标)后的表1:
Var1 Var2 Var3
01-01 dhold_1 1.01
01-01 dhold_2 1.05
01-01 dhold_3 1.04
02-01 dhold_1 1.03
02-01 dhold_2 0.09
03-01 dhold_3 0.99
我在R中尝试了以下内容:
table1$Var3 <- table2[match(table1$Var1,table2$md),match(table1$Var2,colnames(table2))]
上面的代码以某种方式产生了我想要的输出,put 不仅创建了 1 个新列,而且还创建了n
新列,每个列都包含相同的内容。鉴于我有一个更大的文件,它最终以vector allocation error
.
我花了几个小时寻找解决方案。有人有想法吗?提前非常感谢。
解决方案
获取table2
长格式,然后加入。
library(dplyr)
library(tidyr)
table2 %>%
pivot_longer(cols = -md) %>%
right_join(table1, by = c('md' = 'Var1', 'name' = 'Var2'))
# md name value
# <chr> <chr> <dbl>
#1 01-01 dhold_1 1.01
#2 01-01 dhold_2 1.05
#3 01-01 dhold_3 1.04
#4 02-01 dhold_1 1.03
#5 02-01 dhold_2 0.09
#6 02-01 dhold_3 0.99
数据
我想table1
的最后一个值应该是02-01
?我纠正了这一点并将其用于数据。
table1 <- structure(list(Var1 = c("01-01", "01-01", "01-01", "02-01", "02-01",
"02-01"), Var2 = c("dhold_1", "dhold_2", "dhold_3", "dhold_1",
"dhold_2", "dhold_3")), class = "data.frame", row.names = c(NA, -6L))
table2 <- structure(list(md = c("01-01", "02-01"), dhold_1 = c(1.01, 1.03
), dhold_2 = c(1.05, 0.09), dhold_3 = c(1.04, 0.99)),
class = "data.frame", row.names = c(NA, -2L))
推荐阅读
- python-3.x - Pandas & Dataframe:ValueError:只能将大小为 1 的数组转换为 Python 标量
- c - 无法确认在C中完成从服务器端到客户端的数据发送
- angular - 多组件数据共享和html更新问题
- c# - 图层无法访问它引用的图层中使用的方法
- android - Android 更改存储图像的图库相册名称
- r - 移动时间序列(将所有值降至某个阈值以下)
- c# - 每当我在多线程应用程序中读取其他类的字段时,我是否需要锁定?
- powershell - 从 powershell 发送邮件
- typescript - 如何基于 env 禁用 NestJS Logger?
- java - IJ031070:事务无法继续:STATUS_MARKED_ROLLBACK