我有两个不同维度的数据框,称之为df1和df2。它们都有称为Product和Output的整数列。
df2具有名为ActualOne的唯一数字列。我想将ActualOne的所有值从df2追加到df1,其中df1的Product和Output值与df2中的值相关联。对于产品,输出对在df2中找不到,ActualOne由NAs填充。
尝试#1:使用data.table
library(data.table)
setDT(df1)
setDT(df2)
df1[df2, ActualOne := i.ActualOne, on=c("Product", "Output")]
我绝不是data.table的专家。我认为没有必要重新格式化,并认为临时存储为data.table更好。
我收到以下错误:
[.data.table
(df1,df2,:=
(ActualOne,i.ActualOne)中的错误,: 未使用的参数(on = c(“Product”,“Output”))
尝试#2:使用匹配功能
我的头顶上的东西:
df1$ActualOne <- df2[match(df1$Product,df2$Product) & match(df1$Output,df2$Output,"ActualOne"]
这导致df1的ActualOne列由“ActualOne”填充
感谢您的帮助。
答案 0 :(得分:1)
您有data.table
的旧版本。如果您希望代码正常工作,则需要更新到 v1.9.6 + - 请查看更新here。
对于旧版本,惯用二进制连接+更新将首先key
两个data.table
,然后加入/更新。像(我们没有实际数据要测试):
setkey(df1, Product, Output)
setkey(df2, Product, Output)
df1[df2, ActualOne := i.ActualOne]
答案 1 :(得分:0)
这是一种方法:
actualTF <- df1$Product == df2$Product & df1$Output == df2$Output
df1$ActualOne <- sapply(1:50, function(x) if (actualTF[x]) return(df2$ActualOne[x]) else NA)
答案 2 :(得分:0)
我想要merge()
函数。以下是您的描述示例:
library(data.table)
df1 <- data.table(Product=1:10, Output=101:110)
df2 <- data.table(Product=1:3, Output=101:103, ActualOne=c('A', 'B', 'C'))
merge(df1, df2, by=c('Product', 'Output'), all.x=TRUE)