我有3个数据框。每个df都有3个A变量和3个B变量以及3个阈值(1、2、3)
df1 <- tibble(
var1A= rnorm(1:10) +1,
var1B= rnorm(1:10) +1,
var2A= rnorm(1:10) +2,
var2B= rnorm(1:10) +2,
var3A= rnorm(1:10) +3,
var3B= rnorm(1:10) +3)
df2 <- tibble(
var1A= rnorm(1:10) +1,
var1B= rnorm(1:10) +1,
var2A= rnorm(1:10) +2,
var2B= rnorm(1:10) +2,
var3A= rnorm(1:10) +3,
var3B= rnorm(1:10) +3)
df3 <- tibble(
var1A= rnorm(1:10) +1,
var1B= rnorm(1:10) +1,
var2A= rnorm(1:10) +2,
var2B= rnorm(1:10) +2,
var3A= rnorm(1:10) +3,
var3B= rnorm(1:10) +3)
thresholds = c(1, 2, 3)
list_dfs = c('df1','df2','df3')
现在,我想对所有A变量和B变量以及所有dfs执行t.test(例如t.test df1 $ var1A和df1 $ var1B)。我将在matrixTests::col_t_welch()
map(list_dfs,
function(df_name){
x <- get(df_name)
lapply(thresholds, function(i){
col_t_welch(x %>%
pull(paste0("var",i,"A")),
x %>%
pull(paste0("var",i,"B")))
})
})
现在我为varA和varB的t.test的每个阈值和每个df分配一个表。
最后,我想用bind_rows()绑定所有这些表。但是然后我收到一条错误消息:参数1必须具有名称
map(list_dfs,
function(df_name){
x <- get(df_name)
lapply(thresholds, function(i){
col_t_welch(x %>%
pull(paste0("var",i,"A")),
x %>%
pull(paste0("var",i,"B")))
})
}) %>% bind_rows
Error: Argument 1 must have names
有人可以帮助我如何避免这个问题?
答案 0 :(得分:2)
这是您想要的结果吗?
首先,根据您的问题,我加载库并创建数据。
library(tibble)
library(purrr)
library(dplyr)
library(matrixTests)
df1 <- tibble(
var1A= rnorm(1:10) +1,
var1B= rnorm(1:10) +1,
var2A= rnorm(1:10) +2,
var2B= rnorm(1:10) +2,
var3A= rnorm(1:10) +3,
var3B= rnorm(1:10) +3)
df2 <- tibble(
var1A= rnorm(1:10) +1,
var1B= rnorm(1:10) +1,
var2A= rnorm(1:10) +2,
var2B= rnorm(1:10) +2,
var3A= rnorm(1:10) +3,
var3B= rnorm(1:10) +3)
df3 <- tibble(
var1A= rnorm(1:10) +1,
var1B= rnorm(1:10) +1,
var2A= rnorm(1:10) +2,
var2B= rnorm(1:10) +2,
var3A= rnorm(1:10) +3,
var3B= rnorm(1:10) +3)
thresholds = c(1, 2, 3)
list_dfs = c('df1','df2','df3')
在这里,我unlist
绑定前的结果。
map(list_dfs,
function(df_name){
x <- get(df_name)
lapply(thresholds, function(i){
col_t_welch(x %>%
pull(paste0("var",i,"A")),
x %>%
pull(paste0("var",i,"B")))
})
}) %>%
unlist(recursive = FALSE) %>%
bind_rows()
给出,
#> obs.x obs.y obs.tot mean.x mean.y mean.diff var.x var.y
#> 1 10 10 20 0.4123358 0.9386079 -0.52627205 1.2887733 1.4188697
#> 2 10 10 20 1.4848642 1.8852731 -0.40040891 0.7594906 1.9971866
#> 3 10 10 20 2.9905342 3.1454473 -0.15491307 0.9501264 0.6863846
#> 4 10 10 20 1.2409187 0.9453490 0.29556964 1.8969049 0.5213807
#> 5 10 10 20 2.0823664 2.3150223 -0.23265591 0.5171046 0.6771720
#> 6 10 10 20 3.0354769 2.2958400 0.73963696 0.8915344 1.1509940
#> 7 10 10 20 0.5546491 0.8868825 -0.33223340 0.6404670 0.4313640
#> 8 10 10 20 2.9031533 2.5956085 0.30754479 1.1602239 1.6080605
#> 9 10 10 20 3.1435888 3.1988889 -0.05530018 1.7926813 0.4374122
#> stderr df statistic pvalue conf.low conf.high alternative
#> 1 0.5203502 17.95854 -1.0113806 0.3252679 -1.6196681 0.5671240 two.sided
#> 2 0.5250407 14.98023 -0.7626246 0.4575287 -1.5196353 0.7188175 two.sided
#> 3 0.4045381 17.54432 -0.3829381 0.7063657 -1.0064012 0.6965751 two.sided
#> 4 0.4917607 13.59994 0.6010437 0.5576963 -0.7620703 1.3532096 two.sided
#> 5 0.3455831 17.68236 -0.6732272 0.5095070 -0.9596350 0.4943232 two.sided
#> 6 0.4519434 17.71416 1.6365699 0.1193625 -0.2109603 1.6902343 two.sided
#> 7 0.3273883 17.34004 -1.0147992 0.3241530 -1.0219320 0.3574652 two.sided
#> 8 0.5261449 17.54094 0.5845249 0.5663102 -0.7999219 1.4150114 two.sided
#> 9 0.4722387 13.14519 -0.1171022 0.9085494 -1.0743655 0.9637651 two.sided
#> mean.null conf.level
#> 1 0 0.95
#> 2 0 0.95
#> 3 0 0.95
#> 4 0 0.95
#> 5 0 0.95
#> 6 0 0.95
#> 7 0 0.95
#> 8 0 0.95
#> 9 0 0.95
由reprex package(v0.2.1)于2019-03-21创建
答案 1 :(得分:1)
如果您有两种不同的数据库数据类型,则可以在data.frame的帮助下将它们转换为相同的格式。例如如果一个数据库是列表类型,而另一个数据库是双精度类型,反之亦然,那么您想将两者合并,则首先将它们都转换为data.frame,然后使用cbind使用两个数据帧。
combine_data <-cbind(data.frame(data_r),data.frame(data_c))