如何确定两个数据帧中公共列和行之间的增量

时间:2015-12-14 17:17:29

标签: r

我正在寻找一种方法来创建一个数据帧,这个数据帧是减去两列数量和列数不等的数据帧的结果。

我创建了以下两个数据框的示例:

R> t1
Link, P1, P2, P3 
A,  1,  4,  7
B,  2,  5,  8
C,  3,  6,  9

R> t2
Link, P1, P3, P5
A,  1,  5,  1
C,  2,  6,  3
D,  3,  7,  5
F,  4,  8,  7

结果数据框需要表示公共列和行之间的差异:

R> intersect(names(t1),names(t2))
[1] "Link" "P1"   "P3"  
R> intersect(t1$Link,t2$Link)
[1] "A" "C"
R> t1 - t2
Link, P1, P3
A, 0, 2
C, 1, 3

我在两个数据框中有很多列/行。我尝试了合并的几个选项没有运气。我正在寻找有关如何继续的想法。

2 个答案:

答案 0 :(得分:1)

简单的解决方案:

NoMethodError at /calendars
undefined method `chain' for nil:NilClass
@posts_comments = @user.calendar_post_comments.order("created_at DESC").limit(5)

输出:

import jenkins.model.Jenkins
import hudson.model.User

allUsers = User.getAll()
adminList = []
authStrategy = Jenkins.instance.getAuthorizationStrategy()

for (u in allUsers) {
    if (authStrategy.hasPermission(u.toString(), Jenkins.ADMINISTER)) {
        adminList.add(u)
    }
}

println(adminList)

回答你的评论;假设device_nr在t1和t2中是一致的

rownames(t1)<-t1$Link
rownames(t2)<-t2$Link
col_intersect<-intersect(names(t1),names(t2))
row_intersect<-intersect(t1$Link,t2$Link)
t1[row_intersect,col_intersect[-1]] - t2[row_intersect,col_intersect[-1]]

输出:

  P1 P3
A  0  2
C  1  3

答案 1 :(得分:0)

这是一个dplyr解决方案。使用diff进行长时间聚合,然后再回到广角:

require(dplyr)
require(reshape2)
require(magrittr)

local({
    t1$df <- "t1"
    t2$df <- "t2"    
    n <- intersect(names(t1), names(t2))
    rbind(t1[n], t2[n])
}) %>% 
melt(id.vars=c("Link", "df")) %>% 
arrange(Link, variable, desc(df)) %>%
group_by(Link, variable) %>% 
filter(length(value) == 2) %>% 
summarise(delta = diff(value)) %>% 
dcast(Link~variable)