在循环中使用表函数

时间:2017-07-31 13:41:40

标签: r

我正在尝试让table()函数在for循环中运行,理想情况下我会将输出放到数据框中,但是我没有得到以下工作,任何想法?

for(i in unique(ModuleMarks$Module)){
     table(i[,6])
}

表格结构

   Module  Out of Mark  Mark percentage Judgment JudgmentChar
   <chr>         <dbl> <dbl>      <chr>    <dbl>        <chr>
1 LW1001            NA    NA       <NA>       NA         test
2 LW1001            NA    NA       <NA>       NA         test
3 LW1001            NA    NA       <NA>       NA         test
4 LW1001            NA    NA       <NA>       NA         test
.
.
.
1 LW6627           100    57         57       57          2.2
2 LW6627           100    63         63       63          2.1
3 LW6627           100    62         62       62          2.1
4 LW6627           100    65         65       65          2.1
5 LW6627           100    67         67       67          2.1
6 LW6627           100    64         64       64          2.1
This goes on for 7000+rows

所以我试图通过每个模块代码并获取每个模块的表,它们可以是1到500.

示例输出将是

table(LW1108[,6])
1h  2.1  2.2  3.1 Fail Pass test 
54  196  122   21   23   15    7 

但是对于每个模块

table(LW1108[,6])
Module 1h  2.1  2.2  3.1 Fail Pass test 
LW1101 54  196  122   21   23   15    7 
LW1102 54  196  122   21   23   15    7 
.
.
.
LW6601 54  196  122   21   23   15    7 

问题的核心是它没有通过表函数。

由于

2 个答案:

答案 0 :(得分:1)

我认为您需要以下内容......我首先使用mtcars的示例

首先split列上的数据cyl

split.mtcars <- split(mtcars, mtcars$cyl)

然后使用split.mtcars中的map遍历tidyverse,并在table中生成gear个值,将table转换为{{1}然后转到1-row matrix,将data.frame列从setNames输出重命名为names。使用table将输出列表从map转换为data.frame。将Reduce("full_join"...绑定为rownames

中的唯一值
cyl

输出

library(tidyverse)
desired <- Reduce("full_join", map(split.mtcars, ~ as.data.frame(matrix(table(.x$gear), nrow=1, byrow=T)) %>% setNames(names(table(.x$gear)))))
rownames(desired) <- names(split.mtcars)

对您的数据的相同方法

   3  4 5
4  1  8 2
6  2  4 1
8 12 NA 2

答案 1 :(得分:0)

我需要使用get()函数(https://stat.ethz.ch/R-manual/R-devel/library/base/html/get.html)来取出i的值并将其更改为一个对象,因为我是一个需要成为对象的char。 希望这有帮助

#getting the tables of results
for(i in unique(ModuleMarks$Module)){
print(i)
print(table(get(i)[,6]))

}