0

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

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)
    }
}
4

2 回答 2

2

它比你做的简单:

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

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

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

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

于 2013-01-03T15:46:59.057 回答
0

The default row names will be numbers, unless you have assigned them:

  Server
1      a
2      b
3      c
4      d
5      e

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

What you want is to compare against the values, not the names of the rows:

for (i in 1:nrow(df1)) {
  if (df1[i,1] %in% df2$Server) {
    df1[i,2]<-c(1)
  } else{  
    df1[i,2]<-(0)
  }            
}
于 2013-01-03T15:58:33.433 回答