用于循环比较2个数据帧的值,将测试的输出结果放入R中的第3个数据帧中

问题描述 投票:0回答:1

如果它们的值完全相同,我想比较R中的2个数据帧。有点测试。如果df1(row1,column1)的值==与df2(row1,column1)的值完全相同,则它应在我要填充的空第3个数据帧(row1,column1)中的同一位置返回“ OK”与比较的输出测试结果。如果不是,则应在该位置返回“问题”。 secon迭代将是位置2​​,位置3,依此类推,直到测试通过df1和df 2的值为止。-> df1和df2具有相同的列数和相同的行数(150行和6列),df3为空,必须用输出结果填充。

我对于for循环还是很陌生,遭受了反复试验的折磨。到目前为止,我已经尝试过:作为测试数据,我使用了虹膜数据集。数据帧Iris1和Iris2应该相同。为了测试我的for循环是否工作,我在Iris2中手动更改了2个随机值。 Iris3是一个空的数据框,我想用输出testresults填充它。如您所见,我现在正在尝试使用简单的打印功能,但这并不能正常工作,这不是我在这里想要做的。我希望将输出存储在df3中。希望有人可以帮助我。预先感谢!

Iris3 <- Iris1[FALSE,]

  for (i in 1:(length(Iris1))) {
for(j in 1:(length(Iris2))) {
    if(Iris1[[i]] == Iris2[[i]]) {
      print("OK")
    }
    else print("PROBLEM")
}}
r dataframe for-loop compare output
1个回答
0
投票

不需要循环。您可以简单地比较Iris1 == Iris2并使用结果从向量中获取值。

Iris1 <- Iris2 <- Iris3 <- iris

Iris2[1,1] <- 0
Iris2[2,2] <- 0

Iris3[] <- c("PROBLEM", "OK")[1+(Iris1 == Iris2)]

head(Iris3)
#  Sepal.Length Sepal.Width Petal.Length Petal.Width Species
#1      PROBLEM          OK           OK          OK      OK
#2           OK     PROBLEM           OK          OK      OK
#3           OK          OK           OK          OK      OK
#4           OK          OK           OK          OK      OK
#5           OK          OK           OK          OK      OK
#6           OK          OK           OK          OK      OK
© www.soinside.com 2019 - 2024. All rights reserved.