我正在尝试测试数据帧中一列(CS.1)中的数据与数据帧中的其余列(allree)有多相似。数据框有283列,第一列包含用于观察的标签。我尝试设置一个for循环以执行线性回归并将r平方值以及列名保存在新数据框中。但是,我一直在数据帧附近接收错误,结果是长度不正确。
这是代码:
#this is the data frame
allree<-read.csv("All REE 2.csv")
#creating the data frame for the results
cs1 <- data.frame(row = 1:280)
dat <- data.frame(rsq = 1:3, samp = 1:3)
#trying to test each column against the second column (CS.1) and save the r-squared values
for(x in 3:283){
na.rm=TRUE
reg<-lm(CS.1~allree[,x], data=allree)
rsq<-summary(reg)$r.squared
dat$r2[x] <- rsq
dat$sample[x] <- colnames(allree)[x]
if(x==3) cs1<-dat
if(x>3)cs1<-rbind(cs1, dat)
}
这是错误:
Error in `$<-.data.frame`(`*tmp*`, "r2", value = c(NA, NA, 0.180399384405891, : replacement has 4 rows, data has 3
是否需要将原始数据分成多个数据帧?如果我能以这种方式找出答案,我想在其他几列中重复此测试。
答案 0 :(得分:0)
由于您没有提供可复制的示例,因此我将使用mtcars
数据框来完成此操作。
我将使用purrr
,broom
和dplyr
包形式的函数,而不是使用for循环。
数据
此数据框默认为R
glimse(mtcars)
Observations: 32
Variables: 11
$ mpg <dbl> 21.0, 21.0, 22.8, 21.4, …
$ cyl <dbl> 6, 6, 4, 6, 8, 6, 8, 4, …
$ disp <dbl> 160.0, 160.0, 108.0, 258…
$ hp <dbl> 110, 110, 93, 110, 175, …
$ drat <dbl> 3.90, 3.90, 3.85, 3.08, …
$ wt <dbl> 2.620, 2.875, 2.320, 3.2…
$ qsec <dbl> 16.46, 17.02, 18.61, 19.…
$ vs <dbl> 0, 0, 1, 1, 0, 1, 0, 1, …
$ am <dbl> 1, 1, 1, 0, 0, 0, 0, 0, …
$ gear <dbl> 4, 4, 4, 3, 3, 3, 3, 4, …
$ carb <dbl> 4, 4, 1, 1, 2, 1, 4, 2, …
代码
# Map function from purrr allow you to do a loop
purrr::map(
# set the elements to iterate over.
# in this case all variables except
# the first (mpg)
mtcars[,-1],
# The second argument is the body of the loop.
# An lm call with the formula as follow.
# here the .x is replace by a new variable
# in each iteration
~lm(mpg ~ .x, data = mtcars)
) %>%
# Then summarise each output with broom::glance
purrr::map(broom::glance) %>%
# bind all summary
dplyr::bind_rows(.id = "variable") %>%
# selecting the variables of interest
dplyr::select(variable, r.squared)
# A tibble: 10 x 2
variable r.squared
<chr> <dbl>
1 cyl 0.726
2 disp 0.718
3 hp 0.602
4 drat 0.464
5 wt 0.753
6 qsec 0.175
7 vs 0.441
8 am 0.360
9 gear 0.231
10 carb 0.304