R 检查数据框中的单元格是否与另一列相同
我想检查“Pred1”列和“Pred2”列中的名称是否与同一行“Expected”列中的名称相同。如果名称相同,则返回TRUE,否则返回FALSE。我尝试了R 检查数据框中的单元格是否与另一列相同,r,R,我想检查“Pred1”列和“Pred2”列中的名称是否与同一行“Expected”列中的名称相同。如果名称相同,则返回TRUE,否则返回FALSE。我尝试了idential()函数,但不确定如何为每个单元格执行此操作 在 出去 您可以使用outer fun <- Vectorize(function(x, y) identical(d[x, 1], d[x, y])) cbind(d[1], Pred=outer(1:2, 2:3, fun)) # Expected Pr
idential()
函数,但不确定如何为每个单元格执行此操作
在
出去
您可以使用
outer
fun <- Vectorize(function(x, y) identical(d[x, 1], d[x, y]))
cbind(d[1], Pred=outer(1:2, 2:3, fun))
# Expected Pred.1 Pred.2
# 1 Bacteroides FALSE TRUE
# 2 Bifidobacterium TRUE FALSE
资料
d使用for循环的解决方案:
l <- list()
for(i in 2:length(df)){
l[[i]] <- df[,1] == df[,i]
}
df1 <- as.data.frame(do.call(cbind,l))
llappy()
将循环检查所有要检查的列。使用的函数==
将检查右侧的等效项,即d[,“预期”]
lapply(d[, c('Pred1', 'Pred2')], '==', d[, 'Expected'])
#equivalent to
lapply(d[, c('Pred1', 'Pred2')], function(x) x == d[, 'Expected'])
$Pred1
[1] FALSE TRUE
$Pred2
[1] TRUE FALSE
要将其转换为正确的格式,可以将其重新分配给原始列。注:我制作了一份副本,但您可以同样轻松地将结果分配给原始data.frame
d_copy <- d
d_copy[, c('Pred1', 'Pred2')] <- lapply(d[, c('Pred1', 'Pred2')], '==', d[, 'Expected'])
d_copy
Expected Pred1 Pred2
1 Bacteroides FALSE TRUE
2 Bifidobacterium TRUE FALSE
d\u收到,谢谢。你从哪里得到数字1:idential(d[x,1]@user2300940,因为符号是d[,]
在d[x,1]
中的1
表示第一列。你可以通过执行outer(1:2,2:3,0)
来查看outer()中发生了什么。
d <- structure(list(Expected = c("Bacteroides", "Bifidobacterium"),
Pred1 = c("Bacillus", "Bifidobacterium"), Pred2 = c("Bacteroides",
"Escherichia")), row.names = c(NA, -2L), class = "data.frame")
l <- list()
for(i in 2:length(df)){
l[[i]] <- df[,1] == df[,i]
}
df1 <- as.data.frame(do.call(cbind,l))
df <- data.frame(Expected = c("Bacteriodes","Bifidobacterium"),Pred1 = c("Bacillus","Bifidobacterium"),Pred2 = c("Bacteriodes","Escherichia"),stringsAsFactors = F)
lapply(d[, c('Pred1', 'Pred2')], '==', d[, 'Expected'])
#equivalent to
lapply(d[, c('Pred1', 'Pred2')], function(x) x == d[, 'Expected'])
$Pred1
[1] FALSE TRUE
$Pred2
[1] TRUE FALSE
d_copy <- d
d_copy[, c('Pred1', 'Pred2')] <- lapply(d[, c('Pred1', 'Pred2')], '==', d[, 'Expected'])
d_copy
Expected Pred1 Pred2
1 Bacteroides FALSE TRUE
2 Bifidobacterium TRUE FALSE