【问题标题】:How to find equal lines in different tables in R?如何在 R 的不同表中找到相等的行?
【发布时间】:2019-12-04 16:54:32
【问题描述】:

我在 R 中使用两个不同的三列表格,例如:

Initial            Final        Changes
    1              1              200
    1              3              500
    3              1              250
    3              3              175

Table 2
   Initial         Final        Changes
       1              3           180
       1              5           265
       3              3           147
       3              7           155

当表 1 的“初始”列和“最终”列的行等于表 2 中的每一行时,我需要将表 1 的最后一列(更改)加上表 2 的最后一列(更改)相加,生成如下表格:

Initial            Final        Changes
       1                 1         200
       1                 3         680
       1                 5         265
       3                 1         250
       3                 3         322
       3                 7         155

我正在尝试这种方式,但出现错误:

for (row in 1:nrow(t1) {
  t2[t2$Initial == row$Initial && t2$Final == row$Final,t2$Changes] <- row$Changes + t2[t2$Initial == row$Initial && t2$Final == row$Final,t2$Changes]
}

有人可以帮帮我吗?

【问题讨论】:

  • 嗨 Josiane,欢迎来到 StackOverflow!您遇到的具体错误是什么?

标签: r datatables sum


【解决方案1】:

您可以连接两个表并在连接的表上创建一个新列来获取总和:

joined = merge(t1,t2,by = c("Initial","Final"),all=T)
joined["Changes.final"] <- apply(joined[,c("Changes.x","Changes.y")],
                                 FUN = function(x)sum(x,na.rm=T), MARGIN = 1)

数据:

t1 = data.frame(
  "Initial" = c(1,1,3,3),
  "Final" = c(1,3,1,3),
  "Changes" = c(200,500,250,175)
)

t2 = data.frame(
  "Initial" = c(1,1,3,3),
  "Final" = c(3,5,3,7),
  "Changes" = c(180,265,147,155)
)

【讨论】:

  • 非常感谢。你的解决方案我的问题。上帝保佑你
【解决方案2】:

您可以使用aggregaterbind

aggregate(Changes ~ ., rbind(t1, t2), sum)
#  Initial Final Changes
#1       1     1     200
#2       3     1     250
#3       1     3     680
#4       3     3     322
#5       1     5     265
#6       3     7     155

【讨论】:

  • 非常感谢。你的解决方案我的问题。上帝保佑你
猜你喜欢
  • 2021-10-19
  • 1970-01-01
  • 2019-02-06
  • 1970-01-01
  • 2019-10-28
  • 1970-01-01
  • 2013-05-18
  • 1970-01-01
  • 2023-04-09
相关资源
最近更新 更多