我有两个数据帧。第一个包含商家类型,第二个包含位置信息:
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行,我需要以有效的方式来完成此操作。任何帮助表示赞赏。谢谢!
答案 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