r - 如何使用嵌套 for 循环创建多个数据框

标签 r

数据集标记

X <- c("vijay","raj","joy")

Y <- c("maths","eng","science","social","hindi","physical","sanskrit")    

df <- list()

for (i in X){
  for (j in Y)
  {

    df <- data.frame(subset(marks, name == i & subject == j))
  }
}

在这里,我想创建子集,其中包含针对每个学生的所有科目的分数。因此我们希望有 3 X 7 个子集。 但是我写的代码给了我一个子集。如何解决问题?

最佳答案

您可以使用 outer() 但您必须向量化内部函数:

X <- c("vijay","raj","joy")
Y <- c("maths","eng","science","social","hindi","physical","sanskrit")
set.seed(24)
marks <- data.frame(name = sample(X, 100, replace = TRUE), 
                    subject = sample(Y, 100, replace = TRUE), stringsAsFactors = FALSE)

sset <- function(x,y) subset(marks, name == x & subject == y)    
L <- outer(X, Y, FUN=Vectorize(sset, SIMPLIFY=FALSE))
L[1,1]

对象 L 是一个数据帧矩阵。
这是另一个使用双 lapply() 的解决方案:

L2 <- lapply(X, function(x) lapply(Y, function(y) subset(marks, name == x & subject == y)))

对象 L2 是列表的列表。
这是带有 for 循环的变体:

df <- vector("list", length(X)*length(Y))
l <- 1

for (i in X)  for (j in Y) {
  df[[l]] <- subset(marks, name == i & subject == j)
  l <- l+1
}

对于仅对现有级别进行子集化,您可以简单地使用 split()

L3 <- split(marks, list(marks$name, marks$subject))

对象 L3 是一个数据帧列表。

关于r - 如何使用嵌套 for 循环创建多个数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50481979/

相关文章:

r - 通过循环字符串在ggplot中设置x变量

r - 对数正态分布的广义矩法

css - 如何扩大 R DT 包中的数据表?

r - 在 R 中逐行阅读的好方法是什么?

R:使用 dplyr 过滤 data.table 失败

string - 有没有更快的方法将字符串拆分为给定长度的子字符串?

R网格额外: modify theme on the fly for a single tableGrob?

r - 将数据标签添加到 R 中的 spinplot

r - 子类化包含名称为 : access by name 的列表的 S4 类

r - R:为什么热图在相同数量的行上显示白色?