r - 从循环中计算每个新数据帧的行数并将所有内容保存在一个循环中
问题描述
我制作了以下循环,过滤每年(81 到 91 之间)的数据,并从每次迭代中创建一个新的数据框。
for(i in 81:91){
assign(paste0("SampleSizeGaza",i), GazaTB1[GazaTB1$year==i,])
}
有什么办法可以修改这个循环(或创建一个新的循环)来计算每个新datafames的行数(最好使用nrows)并将其保存到一个有两列的数据帧(例如SampleSize)上,是年(从 81 到 91)和 YearSampleSize(每年每个数据帧的 nrow)。任何帮助表示赞赏
解决方案
如果您将数据保存在一个对象中,而不是assign
用于创建多个对象,则分组操作更易于管理。有两种常见的方法可以做到这一点。
碱基R
以下代码用于split
将数据框拆分为一个列表,其中每个数据框的“组”列的唯一值都有一个单独的数据框,然后用于sapply
计算列表中的行数。结果是一个命名向量。
df <- data.frame(
group = sample(letters[1:4], 100, replace = T),
value = rnorm(100)
)
head(df)
group value
1 a 0.3691390
2 b -0.2444268
3 d -0.4776481
4 b -1.5580131
5 a 1.1913923
6 a -2.1483141
df.split <- split(df, df$group)
counts <- sapply(df.split, nrow)
a b c d
24 28 16 32
Tidyverse
或者,我们可以使用tidyverse包直接对数据框执行分组操作,返回汇总数据框:
library(tidyverse)
df.counts <- df %>%
group_by(group) %>%
count()
group n
<chr> <int>
1 a 24
2 b 28
3 c 16
4 d 32
推荐阅读
- powershell - PowerShell:Invoke-RestMethod - 显示百分比进度
- android - 调用返回类型必须参数化为 Call
或调用改造 API 时调用异常 - c# - C# 使用 `byte[]` 中的 `OpenXml` 打开 excel 文件时出现问题
- php - 数组 - 只保留键“别名”以“a”开头的条目
- azure-aks - Azure Kubernetes 服务节点池如何指定 OS 磁盘类型?
- sql - postgresql sql表中获取列不存在错误
- android - 带有 Jetpack 导航的工具栏中的后退按钮不起作用(对于第一个目的地)
- python-3.x - 如何根据其他列值条件区分第一个值和最后一个值
- python - 熊猫应用功能并更新数据框的副本
- sql - 在单个列中同时显示员工的 UID 和姓名