在另一列中逐行标识对应于相等值的1列中的值

时间:2015-10-15 23:36:32

标签: r if-statement

我确信我的问题很简单,但我无法找到解决方案。

我想按行查看我的表格。如果两列(V2,V3)在同一行中具有相同的值,我想提取相应列V1中的值并将其添加到我的表中。因此:

我的数据

m <- matrix(c(1,2,3,5,6,0,0,0,1,3,5,4,1,1,2), 5, 3) 
df1<-as.data.frame(m) 

> df1
  V1 V2 V3
1  1  0  5
2  2  0  4
3  3  0  1
4  5  1  1
5  6  3  2

我想比较V2和V3。相同的值(1,1)在第4行,所以我想从V1获得值5。并将其写入V4。所有其他值可以变为NA。预期结果:

> df1
  V1 V2 V3 V4
1  1  0  5 NA
2  2  0  4 NA
3  3  0  1 NA
4  5  1  1 5
5  6  3  2 NA

我知道我可以按df1[df1$V2 == max(df1$V2), ]选择特定的行,但是如果我只需要第一个值而不是整行呢?我的if循环不起作用......

newcol <- vector()
for (i in 1:nrow(df1)) {
    thematch <- which(df1[,1] == max(df1[,3]))
    newcol<-thematch
} 

which(df1[,2] == (df1[,3]), arr.ind = TRUE)返回行数,而不是V1中的值。

谢谢!

1 个答案:

答案 0 :(得分:2)

我想你可以这样做:

df1$V4 <- with(df1, V1[ifelse(V2==V3, TRUE, NA)] )

  V1 V2 V3 V4
1  1  0  5 NA
2  2  0  4 NA
3  3  0  1 NA
4  5  1  1  5
5  6  3  2 NA