Переупорядочение данных для анализа GLM в R с использованием цикла for - PullRequest
1 голос
/ 09 апреля 2019

Я думаю, что на мой вопрос довольно просто ответить, но я изучаю 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*. Любой вклад приветствуется!

1 Ответ

1 голос
/ 09 апреля 2019

Вот способ изменить форму набора данных, который вы опубликовали.

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".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...