我有两个数据框,都有一列:
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)
}
}
答案 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)
}
}