Используйте одну строку другого фрейма данных за раз: R - PullRequest
0 голосов
/ 04 ноября 2018

У меня есть два кадра данных. Первый содержит типы предприятий, а второй содержит информацию о местоположении:

employee <- c('A','B','C')
salary <- c(21000, 23400, 26800)
workers <- c(500,200,300)

employ.data <- data.frame(employee, salary, workers)
employ_name <- employ.data$employee
employ.data <- employ.data[, -(1)]
rownames(employ.data) <- employ_name

location <- c('NYC','Chicago','Miami')
salary <- c(66000, 55000, 40000)
workers <- c(5000,2050,1300)

location.data <- data.frame(location, salary, workers)
location_name <- location.data$location
location.data <- location.data[, -(1)]
rownames(location.data) <- location_name

Мне нужно добавить первую строку employee.data в location.data (сохраняя исходные индексы обоих) и запустить статистический тест. Затем мне нужно удалить только что добавленную строку, добавить вторую строку во фрейм данных о местоположении и применить тот же статистический тест. Я пытаюсь использовать цикл for, но у меня возникли проблемы.

Мой набор данных намного больше этого - каждый фрейм данных имеет 25 строк, и мне нужно сделать это эффективным способом. Любая помощь приветствуется. Спасибо!

1 Ответ

0 голосов
/ 04 ноября 2018

Попробуйте что-то вроде этого:

list_of_combined_dfs <- lapply(1:nrow(employ.data), function(ind) rbind(location.data, employ.data[ind,]))
list_of_combined_dfs

[[1]]
        salary workers
NYC      66000    5000
Chicago  55000    2050
Miami    40000    1300
A        21000     500

[[2]]
        salary workers
NYC      66000    5000
Chicago  55000    2050
Miami    40000    1300
B        23400     200

[[3]]
        salary workers
NYC      66000    5000
Chicago  55000    2050
Miami    40000    1300
C        26800     300

Здесь lapply по существу зацикливается на всех строках employ.data.

Вы можете снова использовать lapply для выполнения ваших статистических тестов на каждом кадре данных, если вы встроите его в вызов функции первого lapply. Например, предположим, что вы хотите запустить anova после линейной регрессии, тогда:

list_of_test_results <- lapply(1:nrow(employ.data), function(ind) {
  newdf <- rbind(location.data, employ.data[ind,])
  return(anova(lm(salary ~ workers, data = newdf)))})
list_of_test_results
[[1]]
Analysis of Variance Table

Response: salary
          Df    Sum Sq   Mean Sq F value Pr(>F)
workers    1 910028056 910028056    7.88 0.1069
Residuals  2 230971944 115485972               

[[2]]
Analysis of Variance Table

Response: salary
          Df    Sum Sq   Mean Sq F value  Pr(>F)  
workers    1 875636808 875636808  11.515 0.07695 .
Residuals  2 152083192  76041596                  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

[[3]]
Analysis of Variance Table

Response: salary
          Df    Sum Sq   Mean Sq F value Pr(>F)  
workers    1 761233804 761233804  12.604  0.071 .
Residuals  2 120796196  60398098                 
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...