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