通过分组变量从大data.frame中减去小data.frame
我有一个非常大的数据集通过分组变量从大data.frame中减去小data.frame,r,dataframe,operation,R,Dataframe,Operation,我有一个非常大的数据集 mdf <- data.frame (sn = 1:40, var = rep(1:10, 4), block = rep(1:4, each = 10), yld = c(1:40)) 请注意,我可能在销售代表中有时出现var数量不平衡的情况。所以我想用这样的方式来写它,它可以处理不平衡的情况 newdf <- merge(x=mdf, y=blockdf, by="block", suffixes = c("",".blockmean")) new
mdf <- data.frame (sn = 1:40, var = rep(1:10, 4), block = rep(1:4, each = 10),
yld = c(1:40))
请注意,我可能在销售代表中有时出现var数量不平衡的情况。所以我想用这样的方式来写它,它可以处理不平衡的情况
newdf <- merge(x=mdf, y=blockdf, by="block", suffixes = c("",".blockmean"))
newdf$newvr <- newdf$yld-newdf$yld.blockmean
print(newdf, row.names=FALSE)
block sn var yld yld.blockmean newvr
1 1 1 1 10 -9
1 2 2 2 10 -8
1 3 3 3 10 -7
1 4 4 4 10 -6
1 5 5 5 10 -5
1 6 6 6 10 -4
1 7 7 7 10 -3
1 8 8 8 10 -2
1 9 9 9 10 -1
1 10 10 10 10 0
2 11 1 11 20 -9
2 12 2 12 20 -8
...........................
newdf这应该可以做到
block_match <- match(mdf$block, blockdf$block)
transform(mdf, yld = yld - blockdf[block_match, 'yld'])
块匹配
newdf <- merge(x=mdf, y=blockdf, by="block", suffixes = c("",".blockmean"))
newdf$newvr <- newdf$yld-newdf$yld.blockmean
print(newdf, row.names=FALSE)
block sn var yld yld.blockmean newvr
1 1 1 1 10 -9
1 2 2 2 10 -8
1 3 3 3 10 -7
1 4 4 4 10 -6
1 5 5 5 10 -5
1 6 6 6 10 -4
1 7 7 7 10 -3
1 8 8 8 10 -2
1 9 9 9 10 -1
1 10 10 10 10 0
2 11 1 11 20 -9
2 12 2 12 20 -8
...........................
block_match <- match(mdf$block, blockdf$block)
transform(mdf, yld = yld - blockdf[block_match, 'yld'])