在 R 中迭代子集数据
in R iterating through subsetted data
我正在尝试为讲师布置作业,所以这是家庭作业。我希望有人会解释为什么我在做什么不起作用。
我有一个名为 complete_cases 的数据框,我必须报告来自更大 'set' 的指定 'sets' 观察中有多少条记录
数据格式为:
Date sulfate nitrate ID
279 2003-10-06 7.21 0.651 1
285 2003-10-12 5.99 0.428 1
291 2003-10-18 4.68 1.040 1
297 2003-10-24 3.47 0.363 1
303 2003-10-30 2.42 0.507 1
315 2003-11-11 1.43 0.474 1
依此类推 332 个 ID 为 1 到 332 的不同集。我有 'found' 记录完整的实例,并且必须 return 数据来自哪个集以及如何指定集合中有许多完整的数据集(按id)
我正在尝试使用:
for (i in id){
list <- nrow(complete_cases[i])
data<-cbind(id = i, nobs= list)
}
数据
如果我使用一组数据调用该函数,它似乎工作正常:
给我:
id nobs
[1,] 1 117
但尝试将其应用于 id <- c(2,4,8,10,12) 时出现错误:
Error in `[.data.frame`(complete_cases, i) : undefined columns selected
所以我期待的是迭代将 return c(2,4,8,10,12) 中每个 id 的行数和 return id 和每个 id 的大小。这样更清楚了吗?
您的问题在于您对数据进行子集化的方式,为了指定列 ID
应该是迭代器值引用的列,您必须更具体。有多种方法可以做到这一点,这里是一个:
complete_cases[complete_cases$ID == i, ]
你也将每次使用我个人最喜欢的 data <- ...
来覆盖你的向量,它不需要你指定最终集合的维度,如下所示:
data_summary <- vector("list")
k <- 1
for (i in id){
current_id_rowcount <- nrow(complete_cases[complete_cases$ID == i, ])
data_summary[[k]] <-cbind(id = i, nobs=current_id_rowcount)
k <- k + 1
}
final <- do.call(rbind, data_summary)
我正在尝试为讲师布置作业,所以这是家庭作业。我希望有人会解释为什么我在做什么不起作用。 我有一个名为 complete_cases 的数据框,我必须报告来自更大 'set' 的指定 'sets' 观察中有多少条记录 数据格式为:
Date sulfate nitrate ID
279 2003-10-06 7.21 0.651 1
285 2003-10-12 5.99 0.428 1
291 2003-10-18 4.68 1.040 1
297 2003-10-24 3.47 0.363 1
303 2003-10-30 2.42 0.507 1
315 2003-11-11 1.43 0.474 1
依此类推 332 个 ID 为 1 到 332 的不同集。我有 'found' 记录完整的实例,并且必须 return 数据来自哪个集以及如何指定集合中有许多完整的数据集(按id) 我正在尝试使用:
for (i in id){
list <- nrow(complete_cases[i])
data<-cbind(id = i, nobs= list)
}
数据 如果我使用一组数据调用该函数,它似乎工作正常: 给我:
id nobs
[1,] 1 117
但尝试将其应用于 id <- c(2,4,8,10,12) 时出现错误:
Error in `[.data.frame`(complete_cases, i) : undefined columns selected
所以我期待的是迭代将 return c(2,4,8,10,12) 中每个 id 的行数和 return id 和每个 id 的大小。这样更清楚了吗?
您的问题在于您对数据进行子集化的方式,为了指定列 ID
应该是迭代器值引用的列,您必须更具体。有多种方法可以做到这一点,这里是一个:
complete_cases[complete_cases$ID == i, ]
你也将每次使用我个人最喜欢的 data <- ...
来覆盖你的向量,它不需要你指定最终集合的维度,如下所示:
data_summary <- vector("list")
k <- 1
for (i in id){
current_id_rowcount <- nrow(complete_cases[complete_cases$ID == i, ])
data_summary[[k]] <-cbind(id = i, nobs=current_id_rowcount)
k <- k + 1
}
final <- do.call(rbind, data_summary)