Вот способ изменить форму набора данных, который вы опубликовали.
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".