我有两个数据框:(这些是它们的简化版本)

一个

    Link    VU  U   P
1   DVH1    7   1   37
2   DVH2    7   0   38
3   DVH3    10  1   35




    Link    VU  U   P
1   DVH1    2   0   15
2   DVH2    4   0   14
3   DVH3    0   0   5


我想根据它们的位置从数据帧B中的值中减去数据帧B中的值。因此,例如:
对于DVH1,VU为7-2(或5),结果数据帧如下所示:

    Link    VU  U   P
1   DVH1    5   1   22
2   DVH2    3   0   24
3   DVH3    10  1   30

最佳答案

用这个:

within(merge(A,B,by="Link"), {
    VU <- VU.x - VU.y
    U <- U.x - U.y
    P <- P.x - P.y
})[,c("Link","VU","U","P")]


编辑:奖金:如果有太多的成对的列(不仅是VU,U和P),您可以使用以下方法:

M <- merge(A,B,by="Link")

S <- M[,grepl("*\\.x$",names(M))] - M[,grepl("*\\.y$",names(M))]

cbind(M[,1,drop=FALSE],S)

#  Link VU.x U.x P.x
#1 DVH1    5   1  22
#2 DVH2    3   0  24
#3 DVH3   10   1  30

关于r - 从一个数据框中减去另一个数据,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18708395/

10-12 19:44