我有一个有706个变量的数据帧,它们基本上是两个完全相同的数据帧合并在一起,所以有353个以".x“结尾的连名,另外353个以".y”结尾。
我想创建一个循环来比较两个变量(“varble1.x”和“varable1.y”)是否相同。
如果我手动完成这项工作,我将不得不编写353次(针对每对变量)以下代码:
table(ds$variable.x == ds$variable.y)
那么结果将是合乎逻辑的,即:x(Obs) TRUE/FALSE。
我想知道如何编写一个循环,这样我就不必编写相同的东西数百次。
发布于 2019-03-25 16:22:48
假设您在合并之前仍然拥有之前的两个data.frames,则intact:
ds1 <- iris # dummy first data.frame
ds2 <- iris # dummy second data.frame
ds <- merge(ds1, ds2, by = 'Species') # dummy merged data.frame
variables <- intersect(names(ds1), names(ds2))
variables <- variables[!variables %in% names(ds)] # all columns you want to test
store_results <- list() # to store results
for(i in variables){
var.x <- paste0(i, '.x') # the variables you want to compare followe by .x
var.y <- paste0(i, '.y') # the variables you want to compare followe by .y
store_results[[i]] <- table(ds[, var.x] == ds[, var.y]) # comparing
}
假设合并生成了许多重复项,结果如下所示
> store_results
$Sepal.Length
FALSE TRUE
6924 576
$Sepal.Width
FALSE TRUE
6708 792
$Petal.Length
FALSE TRUE
6682 818
$Petal.Width
FALSE TRUE
5806 1694
https://stackoverflow.com/questions/55342106
复制