创建不同长度的 3 维数组

发布于 2024-09-08 16:06:23 字数 265 浏览 1 评论 0原文

我是 R 的初学者。 我想创建一个 3 维数组,但无法定义每个维度的长度。 我正在分析学生在课堂上的成绩。有10个班级,但学生人数不同。而“等级”将为100-90、89-80、79-70……直到有学生获得相关分数。 我打算对多个数组使用几个 for 循环。 如果我创建一个 3 维数组,

arr<-array(data, dim=c(??,??,??)), dimnames= list("class","grade","average Marks") )

I am a beginner of R.
I want to create a 3 dimensional array but I can not define the length of each dimension.
I am analysing students' marks in a class. There are 10 classes but it has a different number of students. And "Grade" will be 100-90, 89-80, 79-70... until there will be any student who got the relevant marks.
I was going to use a couple of for-loops with the multiple array.
If I create a 3 dim array,

arr<-array(data, dim=c(??,??,??)), dimnames= list("class","grade","average Marks") )

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

写下不归期 2024-09-15 16:06:25

你不能。

数组具有固定维度。您可以使用每个维度上的最大值,并将其与 NA 一起分配来填充。

列表是不同长度甚至不同组件类型的替代方案。

You can't.

Array are of fixed dimensions. You could use the maximum along each dimension and allocate that along with NA to fill in.

Lists are the alternative for varying lengths, and even different component types.

池木 2024-09-15 16:06:24

您确实不想为此使用矩阵。数据框允许您混合使用多种数据类型。

clasIDs <- c("Firsthour", "Secondhour", "Thirdhour")
class.size <-c(3, 5, 2)  # small sizes for illustration
cls.frame <- data.frame(clasID=rep(clasIDs, class.size), 
                      student.ID = unlist(sapply(class.size, function(x) seq(from=1, to=x))),
                      grade=factor(rep(NA,10) , levels=c("100-90", "89-80", "79-70")) )

> cls.frame
       clasID student.ID grade
1   Firsthour          1  <NA>
2   Firsthour          2  <NA>
3   Firsthour          3  <NA>
4  Secondhour          1  <NA>
5  Secondhour          2  <NA>
6  Secondhour          3  <NA>
7  Secondhour          4  <NA>
8  Secondhour          5  <NA>
9   Thirdhour          1  <NA>
10  Thirdhour          2  <NA>

You really do not want to use a matrix for this. A dataframe allows you to have a mixture of data types.

clasIDs <- c("Firsthour", "Secondhour", "Thirdhour")
class.size <-c(3, 5, 2)  # small sizes for illustration
cls.frame <- data.frame(clasID=rep(clasIDs, class.size), 
                      student.ID = unlist(sapply(class.size, function(x) seq(from=1, to=x))),
                      grade=factor(rep(NA,10) , levels=c("100-90", "89-80", "79-70")) )

> cls.frame
       clasID student.ID grade
1   Firsthour          1  <NA>
2   Firsthour          2  <NA>
3   Firsthour          3  <NA>
4  Secondhour          1  <NA>
5  Secondhour          2  <NA>
6  Secondhour          3  <NA>
7  Secondhour          4  <NA>
8  Secondhour          5  <NA>
9   Thirdhour          1  <NA>
10  Thirdhour          2  <NA>
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文