如何创建一个循环以比较同一数据帧中的(表)变量?

时间:2019-03-25 16:14:08

标签: r loops

我有一个带有706个变量的数据框,它们基本上是两个相同的数据框,它们合并在一起,所以有353个同名字符以“ .x”结尾,另一个353个同名字符以“ .y”结尾。

我想创建一个循环,比较两个变量(“ varible1.x”和“ variable1.y”)是否相同。

如果要手动执行此操作,则必须为每个变量写353次以下代码:

table(ds$variable.x == ds$variable.y) 

结果将是合乎逻辑的,即:x n(obs)是/否。

我想知道如何编写一个循环,这样我就不必数百次编写相同的东西。

1 个答案:

答案 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