我正在尝试让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
问题的核心是它没有通过表函数。
由于
答案 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]))
}