首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >数据模型中不同变量数的选择

数据模型中不同变量数的选择
EN

Stack Overflow用户
提问于 2012-01-10 03:09:21
回答 1查看 114关注 0票数 1

我有非常大的数据,我需要选择满足特定标准的变量数进行分析(例如,线性模型中的变量)。下面的小数据说明了我的数据。

代码语言:javascript
复制
set.seed (1234) 
mydf <- data.frame (Id = c("dis", 1:5),

V1.a = c(0,sample(c(0, 1,2), 5, replace = T)),V1.b = c(0,sample(c(0, 1,2), 5, replace = T)),
V2.a = c(1.5,sample(c(0, 1,2), 5, replace = T)),V2.b = c(1.5,sample(c(0, 1,2), 5, replace = T)),
V3.a = c(2.0,sample(c(0, 1,2), 5, replace = T)),V3.b = c(2.0,sample(c(0, 1,2), 5, replace = T)),
V4.a = c(5.0,sample(c(0, 1,2), 5, replace = T)),V4.b = c(5.0,sample(c(0, 1,2), 5, replace = T)),
V5.a = c(6.0,sample(c(0, 1,2), 5, replace = T)),V5.b = c(6.0,sample(c(0, 1,2), 5, replace = T)),
V16a = c(11.0,sample(c(0, 1,2), 5, replace = T)),V6.b = c(11.0,sample(c(0, 1,2), 5, replace = T)),
V7.a = c(12.0,sample(c(0, 1,2), 5, replace = T)),V7.b = c(12.0,sample(c(0, 1,2), 5, replace = T)),
V8.a = c(3.0,sample(c(0, 1,2), 5, replace = T)),V8.b = c(3.0,sample(c(0, 1,2), 5, replace = T)))

印刷数据:

代码语言:javascript
复制
   Id V1.a V1.b V2.a V2.b V3.a V3.b V4.a V4.b V5.a V5.b V6a V6.b V7.a V7.b V8.a V8.b
1 dis    0    0  1.5  1.5    2    2    6   6    7    7   11   11   12   12    3    3
2   1    1    2  1.0  1.0    2    0    0    1    2    1    2    0    0    2    0    2
3   2    1    2  2.0  0.0    2    0    2    1    2    1    0    0    2    1    1    1
4   3    2    0  1.0  2.0    1    1    1    0    2    0    1    2    0    2    1    0
5   4    0    1  1.0  1.0    1    1    0    1    0    2    2    2    2    1    0    2
6   5    1    0  2.0  2.0    0    2    1    2    1    1    1    0    2    2    2    2

以下是我的目标:

(1)按第一行中的值对列进行排序--除ID列外,从小到大(即dis)。考虑第一行,同时卖空数据

代码语言:javascript
复制
   Id   V1.a V1.b V2.a V2.b V3.a V3.b V4.a V4.b V5.a V5.b V6a V6.b V7.a V7.b V8.a V8.b
 1 dis    0    0  1.5  1.5    2    2    6   6    7    7   11   11   12   12    3    3

除了V8.a和V8.b之外,列(变量)都是按顺序排列的。短缩数据应按以下顺序排列:

代码语言:javascript
复制
   Id   V1.a V1.b V2.a V2.b V3.a V3.b V8.a V8.b V4.a V4.b V5.a V5.b V6a V6.b V7.a V7.b 
 1 dis    0    0  1.5  1.5    2    2   3   36   6    7    7   11   11   12   12    

(2)利用第一行值的差值计算相邻变量间的差值。例如,对于V1a和V1b,差异为0,对于V1.b和V2.a,差异为1.5 -0= 1.5。

基于row1的相邻变量之间的差异

代码语言:javascript
复制
V1.a - V1b   V1.b- V2.a  V2.a - V2b  V2.b - V3.a    V3.a - V3.b
    0-0      0 - 1.5    1.5 - 1.5     1.5 - 2        2-2       

等等..。

(3)开始建模,除非( 2 )相邻变量之间的差值小于2。一旦差值大于2时,将创建一个新模型,除非数据文件结束,否则将继续处理。第一行将不包括在模型中。

代码语言:javascript
复制
mydf1 =  mydf[-1,]   
model1 <- lm(Id ~ V1.a + V1.b + V2.a + V2.b + V3.a + V3.b + V8.a + V8.b, data = mydf1)
model2 <- lm(Id ~ V4.a + V4.b +  V5.a +  V5.b, data = mydf1)
model3 <- lm(Id ~ V6.a + V6.b + V7.a + V7.b, data = mydf1) 

如何使此过程自动化?

编辑:跟随答案

代码语言:javascript
复制
 d = mydf
> d
  Id V1.a V1.b V2.a V2.b V3.a V3.b V4.a V4.b V5.a V5.b V16a V6.b V7.a V7.b V8.a
1  0    0    0  1.5  1.5    2    2    5    5    6    6   11   11   12   12    3
2  1    1    2  1.0  0.0    1    2    1    2    0    1    1    2    0    1    1
3  2    1    1  2.0  2.0    1    2    0    1    0    1    1    1    0    2    0
4  3    0    0  1.0  2.0    2    0    2    2    2    2    2    1    1    2    0
5  4    0    2  0.0  2.0    2    2    1    1    2    2    2    1    2    1    0
6  5    2    1  2.0  0.0    2    0    1    1    0    1    0    0    0    2    1
  V8.b
1    3
2    2
3    0
4    2
5    0
6    2
>  d <- d[,order(d[1,-1])]
> d
  Id V1.a V1.b V2.a V2.b V3.a V7.b V8.a V3.b V4.a V4.b V5.a V5.b V16a V6.b V7.a
1  0    0    0  1.5  1.5    2   12    3    2    5    5    6    6   11   11   12
2  1    1    2  1.0  0.0    1    1    1    2    1    2    0    1    1    2    0
3  2    1    1  2.0  2.0    1    2    0    2    0    1    0    1    1    1    0
4  3    0    0  1.0  2.0    2    2    0    0    2    2    2    2    2    1    1
5  4    0    2  0.0  2.0    2    1    0    2    1    1    2    2    2    1    2
6  5    2    1  2.0  0.0    2    2    1    0    1    1    0    1    0    0    0

订购不适用于V7.a!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-01-10 03:57:01

对列进行排序,以便第一行位于升序order

代码语言:javascript
复制
d <- d[,c(1,1+order(d[1,-1]))]

计算差异d[1,i] - d[1,i-1] (仅用于第一行):

代码语言:javascript
复制
d[1,-1] <- c(0, diff( drop(as.matrix(d[1,-1])) ))

将变量分组到块中:每次添加一个变量,如果上一步计算的差异为2或更多,则启动一个新组。

代码语言:javascript
复制
i <- 1+which( d[1,-1] >= 2 )
i <- data.frame( begin=c(2,i), end=c(i-1,dim(d)[2]) )

在循环中计算模型,每次创建一个新的data.frame:

代码语言:javascript
复制
models <- list()
for(k in 1:dim(i)[1]) {
  tmp <- d[-1, c(1, i$begin[k] : i$end[k])]
  tmp$Id <- as.numeric(as.character(tmp$Id))
  models[[k]] <- lm(Id ~ ., data=tmp)
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8798098

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档