Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 检查数据框中的单元格是否与另一列相同_R - Fatal编程技术网

R 检查数据框中的单元格是否与另一列相同

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

我想检查“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 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))
l
lappy()
将循环检查所有要检查的列。使用的函数
==
将检查右侧的等效项,即
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