r - 使用 for 循环在 R 中重新安排 GLM 分析的数据
问题描述
我认为我的问题很容易回答,但我正在学习 R,所以我想知道最好的方法。
我有一个如下所示的数据集:
> print(agg_df41367)
# A tibble: 72 x 3
# Groups: hour [24]
hour predicted y
1 0 Feeding 0.121
2 0 Foraging 0.632
3 0 Standing 0.300
4 1 Feeding 0.141
5 1 Foraging 0.727
6 1 Standing 0.183
7 2 Feeding 0.0932
8 2 Foraging 0.817
9 2 Standing 0.133
10 3 Feeding 0.214
我想运行一个 GLM 模型,所以我希望我的数据看起来像:
head(agg_df41361_GLM)
hour Foraging Standing Feeding
0 0.632 0.300 0.121
1 0.727 0.183 0.141
2 0.817 0.133 0.0932
3 etc. etc. 0.214
关于什么是最紧凑的方法的任何想法?理想情况下,我想使用for
-loop 来计算多个数据集的这种转换。我所有的数据集都遵循名称格式agg_df4136*
。任何输入表示赞赏!
解决方案
这是一种重塑您发布的数据集的方法。
library(tidyr)
# example data
dt = read.table(text = "
hour predicted y
1 0 Feeding 0.121
2 0 Foraging 0.632
3 0 Standing 0.300
4 1 Feeding 0.141
5 1 Foraging 0.727
6 1 Standing 0.183
7 2 Feeding 0.0932
8 2 Foraging 0.817
9 2 Standing 0.133
", header=T)
spread(dt, predicted, y)
# hour Feeding Foraging Standing
# 1 0 0.1210 0.632 0.300
# 2 1 0.1410 0.727 0.183
# 3 2 0.0932 0.817 0.133
如果您有多个数据集,最好创建一个列表并将重塑过程应用于每个数据集:
library(tidyverse)
# example of list of dataframes
l = list(dt, dt, dt)
map(l, ~spread(., predicted, y))
# [[1]]
# hour Feeding Foraging Standing
# 1 0 0.1210 0.632 0.300
# 2 1 0.1410 0.727 0.183
# 3 2 0.0932 0.817 0.133
#
# [[2]]
# hour Feeding Foraging Standing
# 1 0 0.1210 0.632 0.300
# 2 1 0.1410 0.727 0.183
# 3 2 0.0932 0.817 0.133
#
# [[3]]
# hour Feeding Foraging Standing
# 1 0 0.1210 0.632 0.300
# 2 1 0.1410 0.727 0.183
# 3 2 0.0932 0.817 0.133
请注意,这里我使用与dt
我的 3 个列表元素相同的数据集 ( ),但只要您具有相同的列名,它将适用于不同的数据集。
如果要创建以您提供的名称模式开头的所有数据集的列表,可以执行以下操作:
# get objects that start with this name pattern
input_names = ls()[grepl("^agg_df4136", ls())]
# get the data that match those names
list_datasets = map(input_names, get)
因此,list_datasets
是您环境中名称以“agg_df4136”开头的所有数据帧的列表。
推荐阅读
- javascript - 从另一个函数返回一个函数是什么意思?
- android - 在 Android 中重用相同的选项卡活动
- c# - 通过证书签署 PDF 文档
- java - 如何制作单个类的jar文件?
- machine-learning - 将因变量的预测值分解为一个截距(基线),并将其余部分归因于自变量。MLI 方法
- forms - 如何在 Symfony 5 中为多个页面构建相同的表单?
- azure - Azure Devops - YAML 发布管道 - 如何使用下拉列表从构建管道中选择特定工件
- java - java - 如何在Java泛型中使用通配符比较两个数字?
- flutter - 如何使用列表中的数据在 Flutter 中打印列表视图?
- css - 浏览器没有在 Vue JS 中切换媒体查询