2012-04-01 55 views
2

我想知道解决一个重复出现问题的最有效的技术。R基于二进制列变量在多列上运行多个函数

我在电子表格/ csv格式许多数据块中,具有这种形式的(0,1为T/F变量):

id_code, age, heart_disease, weight, gender, operated, survived, ct_scan, days_hospitalized, 
1332, 43.2, 1,    213, m,  0,  1,  1,  12 
22322, 76.4, 0,    125, f,  1,  0,  0,  45 
995,  55, 1,    199, m,  0,  1,  0,  34 

为了在,比方说对连续变量在测试执行,幸存者与非幸存者:

myfx1 <- function(x) {t.test((x), mydat$survived)} 
myfx1(mydat$age) 
myfx1(mydat$weight) 

然后我用另一个变量替换'存活'并重复。

为了做好应急交叉表中的幸存者与非幸存者,

myfx2 <- function(x) {xtabs(~mydat$survived+x, data=mydat)} 
myfx2(mydat$gender) 
myfx2(mydat$operated) 

我已经试过plyrdoBy;许多示例总是使用均值/方差或其他简单函数来演示使用情况。什么是处理大量变量的最简单最有效的方法?

回答

1

plyr包中有一个可爱的小函数,它可以逐列运行函数。

colwise(myfx1)(your_db[,you_numeric_columns]) 

更新:

id_code <- sample(1:1000,500) 
age <- sample(40:80,500, replace=T) 
heart_disease <- sample(0:1,500,replace=T) 
weight <- sample(105:250,500,replace=T) 
operated <- sample(0:1,500,replace=T) 
survived <- sample(0:1,500,replace=T) 
ctscan <- sample(12:45,500,replace=T) 

dat <- data.frame(id_code,age,heart_disease,weight,operated,survived,ctscan) 

fx1 <- function(x) t.test(x, dat$survived)$p.value 

colwise(fx1)(dat[,2:ncol(dat)]) 

工作对我来说...作为一个例子。

+0

谢谢 - 我试过这个和变种(查看colwise后),如下所示。没有工作。的误差都印有尝试: 1. colwise(myfx1)(mydat [2]) - > 错误:is.data.frame(DF)是不是TRUE 2. colwise(.myfx1,.mydat (.myfx1,.mydat $ age):找不到对象'.age' – CLS 2012-04-03 00:47:43

+0

3. colwise { stopifnot(is.data.frame(DF)) DF < - strip_splits(DF) 过滤< - 滤波器(DF) 如果(长度(过滤后)== 0) 回报(data.frame()) df < - quickdf(lapply(filtered,.fun,...)) names(df)< - names(filtered) DF } <环境:0x1055ab758> 4. colwise(myfx1,mydat $年龄) 相同的错误3 4. colwise(myfx1)(mydat [,年龄]) - > 错误'[ .data.frame'(mydat,age):object'age'not found 5. colwise(myfx1)(mydat [,mydat $ age]) - > 错误'[.data.frame'(mydat, ,mydat $ age):undefined columns selected – CLS 2012-04-03 00:50:42

+0

6. ddply(mydat,.age,colwise(myfx1)) - > “t.test.default((x),NEC $ Survived中的错误):not enough'x '意见 另外:警告信息: 在mean.default(x)中:argume nt不是数字或逻辑:返回NA“ 7. ddply(mydat,,colwise(myfx1,age)) 8. ddply(mydat,,colwise(myfx1,.age)) – CLS 2012-04-03 00:50:53

相关问题