一次使用另一行数据帧:R

时间:2018-11-04 19:55:37

标签: r loops merge

我有两个数据帧。第一个包含商家类型,第二个包含位置信息:

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 :(得分:1)

尝试这样的事情:

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的函数调用中。例如,假设您要在线性回归后运行方差分析,然后:

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