for循环遍历R中的列名

for loop over column names in R

我正在尝试循环每个选定的列以获取 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)

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

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

这是一个 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]]