根据另一列设置列值

4

我有一个数据框,长这样:

  ID     Score New.ID New.Score
  123     5      456          
  456     1      789          
  789     0      123   

我希望给New.ID列相同的分数(这些分数只是按不同顺序排列而已)。

期望结果:

  ID    Score New.ID New.Score
  123     5      456         1
  456     1      789         0
  789     0      123         5

重新构建数据框的代码:

ID <- as.factor(c(123,456,789))
Score <- c(5,1,0)
New.ID<- as.factor(c(456, 789, 123))
New.Score <- c(1,0,5)
dt <- data.frame(ID, Score, New.ID, New.Score)

更新

期望输出:

  Group  ID Score New.ID New.Score
     1 123     5    456         1
     1 456     1    789         0
     1 789     0    123         5
     2 555     1    999         0
     2 123     1    123         1
     2 999     0    555         1

我试图尝试对每个组使用函数。在第一个组中,ID为123的分数是5,但在第二个组中它的分数是1。我只想使用出现在每个组内的分数。

我尝试使用ave

mtch <- function(x) {
  dt[match(x,dt$ID),"Score"]  
}

dt$New.Score <- ave(dt$New.ID, dt$Group, FUN = mtch)

但是它给了我NA值。

第二个数据框的代码:

Group <- as.factor(c(1, 1, 1, 2, 2, 2))
ID <- as.factor(c(123,456,789, 555, 123, 999))
Score <- c(5,1,0, 1,1,0)
dt <- data.frame(Group, ID, Score, New.ID)
1个回答

4
一个简单的match应该就可以解决问题。根据您提供的数据:
data <- data.frame(ID, Score, New.ID)
data$New.Score <- data[match(data$New.ID,data$ID),"Score"]

然后检查它是否是我们所期望的结果:

identical(dt,data)
#[1] TRUE

谢谢伙计!由于时间限制,暂时无法接受 :) - apples-oranges
1
没问题,很乐意帮忙! - Mike H.
我有一个小请求,也许你可以帮忙! ID 实际上是分组的。相同的 ID 可以在不同的分组中出现,具有不同的分数。我的问题是如何在分组级别上应用此函数。我尝试使用 ave 做了一些事情,但是得到了 NAs 回来。我已经在我的问题中更新了一个例子。再次感谢! - apples-oranges
1
当然可以 - 我认为这个问题与之前的不同,因此应该被视为“新问题”。你能否请发一个新问题,我(或其他人)会回答它? - Mike H.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接