我有一个带有706个变量的数据框,它们基本上是两个相同的数据框,它们合并在一起,所以有353个同名字符以“ .x”结尾,另一个353个同名字符以“ .y”结尾。
我想创建一个循环,比较两个变量(“ varible1.x”和“ variable1.y”)是否相同。
如果要手动执行此操作,则必须为每个变量写353次以下代码:
table(ds$variable.x == ds$variable.y)
结果将是合乎逻辑的,即:x n(obs)是/否。
我想知道如何编写一个循环,这样我就不必数百次编写相同的东西。
答案 0 :(得分:0)
假设合并之前您仍然拥有两个先前的data.frame,则完整无缺:
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