我确信我的问题很简单,但我无法找到解决方案。
我想按行查看我的表格。如果两列(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中的值。
谢谢!
答案 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