【问题标题】:print column names from a data frame using for loop使用 for 循环从数据框中打印列名
【发布时间】:2014-02-22 18:39:39
【问题描述】:

我有两个数据框(比如 frame1 和 frame2)。每个都有大量的变量(比如 frame1 有变量 a1、a2、a3……而 frame 2 有变量 b1、b2、b3……)。我正在对来自两个帧的所有可能的变量对之间的独立性进行卡方检验(所以在 a1 和 b1 之间;a1 和 b2;a1 和 b3,……等等)。我正在使用以下 for 循环来执行此操作,除了在输出中我得到的所有结果都是完美的结果,而没有指定哪个分析属于哪些变量集。我希望以某种方式获得结果,以便每个单独的分析前面都有分析所针对的两个变量名称。

for (i in frame1) {
for (j in frame2) 
print({chisq.test(table(i,j))})}

R 对我来说很新,所以任何帮助都将不胜感激!

【问题讨论】:

    标签: r


    【解决方案1】:

    您不需要循环,将结果存储在列表中可能更方便。这是一个包含一些虚假数据的示例:

    frame1 <- data.frame(a1=rnorm(10), a2=rnorm(10), a3=rnorm(10), a4=rnorm(10))
    frame2 <- data.frame(b1=rnorm(10), b2=rnorm(10), b3=rnorm(10), b4=rnorm(10))
    
    # setup all column combinations
    cols <- expand.grid(1:ncol(frame1), 1:ncol(frame2))
    
    # output to named list
    setNames(apply(cols, 1, function(x) {
        chisq.test(table(frame1[,x[1]], frame2[,x[2]]))
    }), paste(names(frame1)[cols[,1]], names(frame2)[cols[,2]], sep=':'))
    

    结果的(前几个条目):

    $`a1:b1`
    
            Pearson's Chi-squared test
    
    data:  table(frame1[, x[1]], frame2[, x[2]])
    X-squared = 90, df = 81, p-value = 0.2313
    
    
    $`a2:b1`
    
            Pearson's Chi-squared test
    
    data:  table(frame1[, x[1]], frame2[, x[2]])
    X-squared = 90, df = 81, p-value = 0.2313
    
    
    $`a3:b1`
    
            Pearson's Chi-squared test
    
    data:  table(frame1[, x[1]], frame2[, x[2]])
    X-squared = 90, df = 81, p-value = 0.2313
    
    
    $`a4:b1`
    
            Pearson's Chi-squared test
    
    data:  table(frame1[, x[1]], frame2[, x[2]])
    X-squared = 90, df = 81, p-value = 0.2313
    
    
    $`a1:b2`
    
            Pearson's Chi-squared test
    
    data:  table(frame1[, x[1]], frame2[, x[2]])
    X-squared = 90, df = 81, p-value = 0.2313
    
    ...
    

    【讨论】:

      【解决方案2】:

      你可以这样做吗?

      for (i in 1:ncol(frame1)) {
        for (j in 1:ncol(frame2)) {
          print(colnames(frame1)[i])
          print(colnames(frame2)[j])
          print({chisq.test(table(frame1[,i],frame2[,j]))})
        }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-11-21
        • 1970-01-01
        • 1970-01-01
        • 2013-02-20
        • 1970-01-01
        • 2020-09-08
        • 2015-11-01
        相关资源
        最近更新 更多