【问题标题】:for loop over column names in Rfor循环遍历R中的列名
【发布时间】:2021-06-02 14:35:08
【问题描述】:

我正在尝试循环每个选定的列以获取 table()。 非常感谢。

  my.df <- mtcars[,c(2:5)]
colnames(my.df) <- c("A.1", "A.2", "A.3", "A.4")

nam <- NULL; my.tables <- NULL
for(i in 1:4) { 
  nam[i] <- paste("A.", i, sep = "")
  my.tables[i] <- table(my.df$nam[i])
}
nam
my.tables

预期的答案

 table(my.df$A.1)....table(my.df$A.4)

【问题讨论】:

  • lapply(my.df, table)?
  • 谢谢,但在本例中我正在尝试使用列名设置 for 循环 my.df$A.1

标签: r for-loop data-manipulation


【解决方案1】:

这是使用purrr 包的快速解决方案:

my.tables <- purrr::map(mtcars[, c(2:5)], table)

【讨论】:

    【解决方案2】:

    这是一个for 循环解决方案。

    # reserve space for the variables beforehand
    nam <- character(4)
    my.tables <- vector("list", length = 4)
    for(i in 1:4) {
      nam[i] <- paste0("A.", i)
      my.tables[[i]] <- table(my.df[[ nam[i] ]])
    }
    nam
    my.tables
    

    与循环结果的唯一区别是列表成员的名称。 lapply 循环方式分配名称。

    my.tables2 <- lapply(my.df, table)
    all.equal(my.tables, my.tables2)
    #[1] "names for current but not for target"
    

    这样,您可以通过以下任何等效方式访问结果。

    my.tables2$A.1
    my.tables2[["A.1"]]
    my.tables2[[1]]
    

    而没有分配名称属性,仅通过列表成员编号。

    my.tables[[1]]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-12-15
      • 1970-01-01
      • 1970-01-01
      • 2010-12-09
      • 1970-01-01
      • 1970-01-01
      • 2018-09-28
      相关资源
      最近更新 更多