R 对于循环,如果条件应用于数据帧

R 对于循环,如果条件应用于数据帧,r,dataframe,R,Dataframe,如果有两个尺寸/大小为n1*n2和m1*m2的csv数据帧data1和data2。我想创建一个包含差异的新数据框架:If(且仅当) P> >我想考虑< /P> difference[i,z] <- abs(data1[i,x]-data2[i,y]) 定义明确 (3) “差异”矩阵/帧的行数应与i和j的行数相同,其中 data1[i,1] = data2[j,1] & data1[i,3] = data2[j,3] 我不知道这个号码是多少。因此,我无法真正指定“差异”

如果有两个尺寸/大小为n1*n2和m1*m2的csv数据帧data1和data2。我想创建一个包含差异的新数据框架:If(且仅当)

<> P> >我想考虑< /P>
    difference[i,z] <- abs(data1[i,x]-data2[i,y])
定义明确

(3) “差异”矩阵/帧的行数应与i和j的行数相同,其中

data1[i,1] = data2[j,1] & data1[i,3] = data2[j,3]
我不知道这个号码是多少。因此,我无法真正指定“差异”的大小

编辑:

   data1 = read.csv("path/to/data1.csv") ## Prices of 157 products each at
   ## 122 time points; (column1=Product, column3=date, column7=price)      
   data2 = read.csv("path/to/data2.csv") ## Prices of 118 products each at
   ## 122 time points; (column1=Product, column3=date, column6=price)
   ## the 122 time points are the same for both frames 
   ## But: data1 contains some products data2 doesn't and vice versa
   ## I want to compare prices of the same products at the same time
到目前为止,我已经为产品X1手动完成了:

   priceX1 = as.data.frame(data1[c(1,122),7])
   priceX2 = as.data.frame(data2[c(5,126),6]) ## Product X2 starts at row 5
   differenceX1 <- abs(priceX1 - priceX2)
“…”代表我省略了一长串不适合这里的产品

dput(数据2)
返回

     ..., NA, NA, NA)), .Names = c("PRODUCT", "QUALIFIER_II", 
"DATE", "QUALIFIER_I", "Data2_source", "PRICE"), row.names = c(NA, 
19161L), class = "data.frame")
“..”代表我省略了一个巨大的价格列表,而这些价格列表无法放在这里。

通过合并两个数据帧,您可以找到满足您条件的所有对(i,j)。帧:

differences = merge(data1, data2, by=c('PRODUCT','DATE'))
这样可以完全避免for循环,并且您可以轻松定义新列:

differences$Diff = abs(differences$PRICE.x - differences$PRICE.y)
通过合并两个data.frames,可以找到满足条件的所有对(i,j):

differences = merge(data1, data2, by=c('PRODUCT','DATE'))
这样可以完全避免for循环,并且您可以轻松定义新列:

differences$Diff = abs(differences$PRICE.x - differences$PRICE.y)

与您分享可复制的数据样本和预期输出desire@joel.wilson我已经编辑了我的问题。它有用吗?它不会,因为我们不知道这条路在哪里,在哪里?加载数据集,然后发布
dput(data1)
dput(data2)
我在问题中编辑了什么
dput(data1)
dput(data2)
返回。我希望这会有帮助。这些不是完整的DPUT,只有部分,因为您使用省略号(…)。相信我们,那些奇怪的垃圾对我们来说意义重大。提供所有这些。更好的是,请提供预期输出,因为没有数据的文本解释很难理解。与您分享一个可复制的数据样本和预期输出desire@joel.wilson我已经编辑了我的问题。它有用吗?它不会,因为我们不知道这条路在哪里,在哪里?加载数据集,然后发布
dput(data1)
dput(data2)
我在问题中编辑了什么
dput(data1)
dput(data2)
返回。我希望这会有帮助。这些不是完整的DPUT,只有部分,因为您使用省略号(…)。相信我们,那些奇怪的垃圾对我们来说意义重大。提供所有这些。更好的是,请提供预期输出,因为没有数据的文本解释很难理解。非常感谢,这非常有帮助。非常感谢,这非常有帮助。
differences = merge(data1, data2, by=c('PRODUCT','DATE'))
differences$Diff = abs(differences$PRICE.x - differences$PRICE.y)