测试R中的1级因子

时间:2017-07-28 14:11:09

标签: r dataframe factors

我有一个非常大的数据集,我根据其中一个因素分解成较小的数据框:状态。不幸的是,对于某些州,我的数据非常少(例如阿拉斯加州)。当我在较小的数据框架上运行我的基本模型时,我会遇到其中一个因素的问题(性别变量只是' M' F')。

我使用循环来设置每个状态的数据帧。我正在计划构建一个if语句,如果它没有1级因子,它只会运行模型。但我不知道如何构建它。

states_list<-c("AK", ... "WY") # shortened for brevity
resultsList<-list()
j<-1
for (i in states_list){
    temp_data<-raw[raw$state==i,]
    fac <- min(factor(temp_data) # <- Part I don't have right
    if(fac > 1){
        model<-lm(y_var~gender,data=temp_data)
        resultsList[[j]]<-summary(model)
    } else {
        print(i)
        print("doesn't have enough data points")
    }
    j=j+1
}

由于 -W

1 个答案:

答案 0 :(得分:1)

您不需要使用for循环,我强烈建议您使用library(dplyr) library(broom) # example dataframe dt = data.frame(state = c(rep("AA",20), rep("BB",15)), gender = c(rep("M",10), rep("F",10), rep("M",15)), value = rnorm(35, 100, 5), stringsAsFactors = F) dt %>% group_by(state) %>% # for each state mutate(NumUniqueGenders = n_distinct(gender)) %>% # count how many unique values of gender you have (and add it for each row) filter(NumUniqueGenders == 2) %>% # keep only rows the belong to a state with both M and F do(tidy(lm(value ~ gender, data=.))) %>% # run model and save output as a dataframe ungroup # forget the grouping # # A tibble: 2 x 6 # state term estimate std.error statistic p.value # <chr> <chr> <dbl> <dbl> <dbl> <dbl> # 1 AA (Intercept) 99.9643476 1.092526 91.4983355 1.787784e-25 # 2 AA genderM 0.6236803 1.545066 0.4036594 6.912182e-01 包将模型输出保存为数据框,以便您可以访问所需的任何值。

{{1}}

因此,最终您将得到一个每个状态有2行的数据帧。一个用于拦截,一个用于性别。