Как создать цикл для сравнения (таблицы) переменных внутри одного и того же кадра данных? - PullRequest
0 голосов
/ 25 марта 2019

У меня есть фрейм данных с 706 переменными, в основном это два идентичных фрейма данных, объединенных вместе, так что есть 353 имени, которые заканчиваются на «.x», а остальные 353 заканчиваются на «.y».

Я хочу создать цикл, который будет сравнивать, идентичны ли две соответствующие переменные ("varible1.x" и "variable1.y").

Если бы я делал это вручную, мне пришлось бы 353 раза (для каждой пары переменных) написать следующий код:

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

Результаты будут тогда логичными, то есть: x n (obs) TRUE / FALSE.

Я хотел бы знать, как я могу написать цикл, чтобы мне не приходилось писать одно и то же сотни раз.

1 Ответ

0 голосов
/ 25 марта 2019

Предполагая, что у вас еще есть оба предыдущих data.frames до слияния, контакты:

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 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...