【问题标题】:R run several functions on multiple columns based on binary column variableR基于二进制列变量在多列上运行多个函数
【发布时间】:2012-04-01 22:11:44
【问题描述】:

我想知道解决反复出现的问题的最有效技术。

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

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

为了对幸存者与非幸存者中的连续变量进行 t 检验:

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;许多示例总是使用均值/方差或其他简单函数来演示用法。处理大量变量的最简单最有效的方法是什么?

【问题讨论】:

    标签: r


    【解决方案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)])
    

    对我有用……例如。

    【讨论】:

    • 谢谢 - 我尝试了这个和变体(在查找 colwise 之后),如下所示。没有工作。尝试打印错误: 1. colwise(myfx1)(mydat[,2]) -> 错误:is.data.frame(df) is not TRUE 2. colwise(.myfx1, .mydat$age) -> colwise(.myfx1, .mydat$age) 中的错误:找不到对象“.age”
    • 3. colwise(.myfx1, mydat$age) -> 函数 (df, ...) { stopifnot(is.data.frame(df)) df 4. colwise (myfx1, mydat$age) 与 3 相同的错误 4. colwise(myfx1)(mydat[,age]) -> [.data.frame(mydat, , age) 中的错误:找不到对象 'age' 5. colwise(myfx1) (mydat[,mydat$age]) -> [.data.frame(mydat, , mydat$age) 中的错误:选择了未定义的列
    • 6. ddply(mydat, .age, colwise(myfx1)) -> "t.test.default((x), NEC$Survived) 中的错误:没有足够的'x'观察另外:警告消息:在 mean.default(x ) : 参数不是数字或逻辑:返回 NA" 7. ddply(mydat, , colwise(myfx1, age)) 8. ddply(mydat, , colwise(myfx1, .age))
    猜你喜欢
    • 1970-01-01
    • 2017-04-13
    • 2020-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-06
    • 2022-12-31
    相关资源
    最近更新 更多