首页 > 解决方案 > R在循环中获取列名

问题描述

这听起来应该很容易,但我在 R 中找不到如何执行此操作。如何循环遍历数据框的所有列并将列名和其他值(标签列值)添加到新数据框?下面df代码中的数据框是现有数据框,仅包含数字列和一个label特征(只有 0 或 1 个值)。在下面的代码中,该colnames(i)部分不起作用,因为它需要一个列表。如何i在循环中打印列名?for 循环中的biserial.cor(i, df$label)函数需要两个参数。其中第一个需要是数字向量,第二个应该是布尔向量(只有 0 或 1)。所以预期的结果bis.cor.table应该如下:

colname  corrWithLabel
col1     0.45
col2     0.12
col3     0.8
#Create new dataframe
    bis.cor.table = data.frame(colname = character(),
                               corrWithLabel = numeric())

    #Loop trough df and add values to dataframe bis.cor.table
    for(i in = df) {
      new.df = data.frame(colnames(i), biserial.cor(i, df$label))
      names(de) = c("colname", "corrWithLabel")

      bis.cor.table =  r.bind(bis.cor.table, new.df)
    }



标签: rloopsdataframe

解决方案


看起来你的代码中有很多错别字,但我想我理解逻辑。通过修复它们,这就是我所拥有的:

df = data.frame(col1 = runif(10),
                col2 = runif(10),
                col3 = runif(10),
                label = sample(c(0,1), size = 10, replace = TRUE))

#Create new dataframe
bis.cor.table = data.frame(colname = character(),
                           corrWithLabel = numeric())


#Loop trough df and add values to dataframe bis.cor.table
for(i in 1:ncol(df)) {
  new.df = data.frame(colnames(df)[i], biserial.cor(df[i], df$label))
  names(new.df) = c("colname", "corrWithLabel")

  bis.cor.table =  rbind(bis.cor.table, new.df)
}

不确定这是不是最好的方法,而且我无法测试结果是否准确。


推荐阅读