比较R中的两个数据帧项

时间:2013-01-03 15:38:01

标签: r

我有两个数据框,都有一列:

DF1

Server
A
B
c
d

DF2

Server
a
f
z
x

我需要检查df2 $ Server中是否存在df1 $ Server。如果是,我需要在df1中添加一个列并将其他1放入0.

我有这个代码,我认为算法是正确的,但似乎没有用。任何意见都表示赞赏。

for (i in 1:nrow(df1)) {
    if (df1[i,1] %in% row.names(df2)) {
        df1[i,2]<-c(1)
    } else{
        df1[i,2]<-(0)
    }
}

2 个答案:

答案 0 :(得分:2)

它比你做的更简单:

df1$LogicalColumn <- as.numeric(df1$Server==df2$Server)

这将按每列排序并检查成对相等。

df1$LogicalColumn <- as.numeric(df1$Server %in% df2$Server)

这会为df2的每个值检查df1$Server列的所有值。如果它确实是您关注的rownames(为什么?),请在任一上下文中将df2$Server替换为rownames(df2)

答案 1 :(得分:0)

默认行名称将是数字,除非您已分配它们:

  Server
1      a
2      b
3      c
4      d
5      e

> row.names(df3)
[1] "1" "2" "3" "4" "5"

您想要的是与值进行比较,而不是行的名称:

for (i in 1:nrow(df1)) {
  if (df1[i,1] %in% df2$Server) {
    df1[i,2]<-c(1)
  } else{  
    df1[i,2]<-(0)
  }            
}