exponenta event banner

rows2vars

Переориентировать таблицу или расписание таким образом, чтобы строки становились переменными

Описание

пример

T2 = rows2vars(T1) изменяет ориентацию строк T1, чтобы они стали переменными в выходной таблице T2, как показано на диаграмме. Если rows2vars может объединять содержимое строк T1, то соответствующие переменные T2 являются массивами. В противном случае переменные T2 являются массивами ячеек. rows2vars всегда возвращает таблицу, хотя T1 может быть либо таблицей, либо расписанием.

rows2vars функция копирует имена переменных T1 в новую переменную T2. Если T1 имеет имена строк или времени строк, затем эти имена или времена становятся именами переменных T2. В противном случае rows2vars генерирует имена Var1,…,VarN в качестве имен переменных T2.

пример

T2 = rows2vars(T1,Name,Value) указывает дополнительные аргументы, использующие один или несколько аргументов пары имя-значение. Например, можно использовать 'VariableNamesSource' аргумент пары имя-значение для указания источника имен переменных T2.

Примеры

свернуть все

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

Загрузка массивов данных из patients.mat файл. Создание таблицы, содержащей LastName, Gender, Age, Height, и Weight переменные.

load patients
T1 = table(LastName,Gender,Age,Height,Weight);
head(T1,3)
ans=3×5 table
      LastName        Gender      Age    Height    Weight
    ____________    __________    ___    ______    ______

    {'Smith'   }    {'Male'  }    38       71       176  
    {'Johnson' }    {'Male'  }    43       69       163  
    {'Williams'}    {'Female'}    38       64       131  

Измените ориентацию строк T1 на переменные выходной таблицы.

T2 = rows2vars(T1);

Отображение первых четырех переменных T2. Первая переменная T2 содержит имена переменных T1. Остальные переменные T2 соответствуют строкам T1. С тех пор T1 не имел меток строк, переменные T2 иметь имена по умолчанию, Var1 кому VarN для N переменные.

T2(:,1:4)
ans=5×4 table
    OriginalVariableNames      Var1          Var2            Var3    
    _____________________    _________    ___________    ____________

        {'LastName'}         {'Smith'}    {'Johnson'}    {'Williams'}
        {'Gender'  }         {'Male' }    {'Male'   }    {'Female'  }
        {'Age'     }         {[   38]}    {[     43]}    {[      38]}
        {'Height'  }         {[   71]}    {[     69]}    {[      64]}
        {'Weight'  }         {[  176]}    {[    163]}    {[     131]}

Создайте таблицу с именами строк. Если таблица имеет имена строк, то rows2vars преобразует имена строк в имена переменных.

T3 = table(Gender,Age,Height,Weight,'RowNames',LastName);
head(T3,3)
ans=3×4 table
                  Gender      Age    Height    Weight
                __________    ___    ______    ______

    Smith       {'Male'  }    38       71       176  
    Johnson     {'Male'  }    43       69       163  
    Williams    {'Female'}    38       64       131  

Переориентировать строки T3.

T4 = rows2vars(T3);
T4(:,1:4)
ans=4×4 table
    OriginalVariableNames     Smith      Johnson      Williams 
    _____________________    ________    ________    __________

         {'Gender'}          {'Male'}    {'Male'}    {'Female'}
         {'Age'   }          {[  38]}    {[  43]}    {[    38]}
         {'Height'}          {[  71]}    {[  69]}    {[    64]}
         {'Weight'}          {[ 176]}    {[ 163]}    {[   131]}

Загрузите расписание и отобразите его.

load bostonTT
Boston
Boston=6×3 timetable
           Time            Temp    WindSpeed    Rain
    ___________________    ____    _________    ____

    2016-06-09 06:03:00    59.5       0.1       0.05
    2016-06-09 12:00:23      63       2.3       0.08
    2016-06-09 18:02:57    61.7       3.1       0.13
    2016-06-10 06:01:47    55.4       5.7       0.15
    2016-06-10 12:06:00    62.3       2.6       0.87
    2016-06-10 18:02:57    58.8       6.2       0.33

Переориентируйте его таким образом, чтобы его строки становились переменными в выходных данных. rows2vars функция преобразует время строки в имена, но изменяет их так, чтобы они были допустимыми именами переменных. Кроме того, выходной аргумент, возвращенный rows2vars всегда является таблицей, даже если входной аргумент является расписанием.

T = rows2vars(Boston)
Warning: Table variable names that were not valid MATLAB identifiers have been modified. Since table variable names must be unique, any table variable names that happened to match the new identifiers also have been modified.
To use the original row names as new variable names, set 'PreserveVariableNames' to true.
T=3×7 table
    OriginalVariableNames    x2016_06_0906_03_00    x2016_06_0912_00_23    x2016_06_0918_02_57    x2016_06_1006_01_47    x2016_06_1012_06_00    x2016_06_1018_02_57
    _____________________    ___________________    ___________________    ___________________    ___________________    ___________________    ___________________

        {'Temp'     }               59.5                     63                   61.7                   55.4                   62.3                   58.8        
        {'WindSpeed'}                0.1                    2.3                    3.1                    5.7                    2.6                    6.2        
        {'Rain'     }               0.05                   0.08                   0.13                   0.15                   0.87                   0.33        

Начиная с R2020a, можно брать имена из входной таблицы или расписания и использовать их как имена переменных в выходной таблице без изменений. Для сохранения исходных имен используйте 'VariableNamingRule' аргумент пары имя-значение.

Загрузите расписание и отобразите его.

load bostonTT
Boston
Boston=6×3 timetable
           Time            Temp    WindSpeed    Rain
    ___________________    ____    _________    ____

    2016-06-09 06:03:00    59.5       0.1       0.05
    2016-06-09 12:00:23      63       2.3       0.08
    2016-06-09 18:02:57    61.7       3.1       0.13
    2016-06-10 06:01:47    55.4       5.7       0.15
    2016-06-10 12:06:00    62.3       2.6       0.87
    2016-06-10 18:02:57    58.8       6.2       0.33

Измените ориентацию расписания таким образом, чтобы его время строки становилось именем переменной в выходной таблице. Преобразовать datetime значения для строк и сохранения результирующих имен с помощью 'VariableNamingRule' пара имя-значение.

T = rows2vars(Boston,'VariableNamingRule','preserve')
T=3×7 table
    OriginalVariableNames    2016-06-09 06:03:00    2016-06-09 12:00:23    2016-06-09 18:02:57    2016-06-10 06:01:47    2016-06-10 12:06:00    2016-06-10 18:02:57
    _____________________    ___________________    ___________________    ___________________    ___________________    ___________________    ___________________

        {'Temp'     }               59.5                     63                   61.7                   55.4                   62.3                   58.8        
        {'WindSpeed'}                0.1                    2.3                    3.1                    5.7                    2.6                    6.2        
        {'Rain'     }               0.05                   0.08                   0.13                   0.15                   0.87                   0.33        

Имена переменных в T недопустимы идентификаторы MATLAB, поскольку даты начинаются с числа. Однако для ссылки на такие переменные можно использовать точечную нотацию, используя круглые скобки.

T.('2016-06-09 06:03:00')
ans = 3×1

   59.5000
    0.1000
    0.0500

Считывание данных из электронной таблицы в таблицу. Просмотрите первые три строки.

T1 = readtable('patients.xls');
head(T1,3)
ans=3×10 table
      LastName        Gender      Age              Location               Height    Weight    Smoker    Systolic    Diastolic    SelfAssessedHealthStatus
    ____________    __________    ___    _____________________________    ______    ______    ______    ________    _________    ________________________

    {'Smith'   }    {'Male'  }    38     {'County General Hospital'  }      71       176      true        124          93             {'Excellent'}      
    {'Johnson' }    {'Male'  }    43     {'VA Hospital'              }      69       163      false       109          77             {'Fair'     }      
    {'Williams'}    {'Female'}    38     {'St. Mary's Medical Center'}      64       131      false       125          83             {'Good'     }      

Переориентировать строки T1 чтобы быть переменными новой таблицы, T2. Укажите, что LastName переменная из T1 является источником имен переменных T2.

T2 = rows2vars(T1,'VariableNamesSource','LastName');

Отображение первых четырех переменных T2. Первая переменная T2 содержит имена переменных T1. Остальные переменные T2 соответствуют строкам T1.

T2(:,1:4)
ans=9×4 table
       OriginalVariableNames                   Smith                   Johnson                  Williams           
    ____________________________    ___________________________    _______________    _____________________________

    {'Gender'                  }    {'Male'                   }    {'Male'       }    {'Female'                   }
    {'Age'                     }    {[                     38]}    {[         43]}    {[                       38]}
    {'Location'                }    {'County General Hospital'}    {'VA Hospital'}    {'St. Mary's Medical Center'}
    {'Height'                  }    {[                     71]}    {[         69]}    {[                       64]}
    {'Weight'                  }    {[                    176]}    {[        163]}    {[                      131]}
    {'Smoker'                  }    {[                      1]}    {[          0]}    {[                        0]}
    {'Systolic'                }    {[                    124]}    {[        109]}    {[                      125]}
    {'Diastolic'               }    {[                     93]}    {[         77]}    {[                       83]}
    {'SelfAssessedHealthStatus'}    {'Excellent'              }    {'Fair'       }    {'Good'                     }

Просмотр данных в T2.Smith. В этом примере каждая переменная T2 является массивом ячеек 9 на 1, поскольку значения в строках T1 невозможно объединить в массивы.

T2.Smith
ans=9×1 cell array
    {'Male'                   }
    {[                     38]}
    {'County General Hospital'}
    {[                     71]}
    {[                    176]}
    {[                      1]}
    {[                    124]}
    {[                     93]}
    {'Excellent'              }

Считывание данных из электронной таблицы в таблицу. В качестве имен строк таблицы используйте первый столбец электронной таблицы. Просмотрите первые три строки.

T1 = readtable('patients.xls','ReadRowNames',true);
head(T1,3)
ans=3×9 table
                  Gender      Age              Location               Height    Weight    Smoker    Systolic    Diastolic    SelfAssessedHealthStatus
                __________    ___    _____________________________    ______    ______    ______    ________    _________    ________________________

    Smith       {'Male'  }    38     {'County General Hospital'  }      71       176      true        124          93             {'Excellent'}      
    Johnson     {'Male'  }    43     {'VA Hospital'              }      69       163      false       109          77             {'Fair'     }      
    Williams    {'Female'}    38     {'St. Mary's Medical Center'}      64       131      false       125          83             {'Good'     }      

Переориентировать указанные переменные из T1 и отменить восстановление. Чтобы указать переменные данных по имени, используйте массив ячеек символьных векторов.

T2 = rows2vars(T1,'DataVariables',{'Gender','Age','Height','Weight'});
T2(:,1:4)
ans=4×4 table
    OriginalVariableNames     Smith      Johnson      Williams 
    _____________________    ________    ________    __________

         {'Gender'}          {'Male'}    {'Male'}    {'Female'}
         {'Age'   }          {[  38]}    {[  43]}    {[    38]}
         {'Height'}          {[  71]}    {[  69]}    {[    64]}
         {'Weight'}          {[ 176]}    {[ 163]}    {[   131]}

Можно также указать переменные данных по положению во входной таблице. Чтобы задать положения переменных, используйте числовой массив.

T3 = rows2vars(T1,'DataVariables',[1 2 6:9]);
T3(:,1:4)
ans=6×4 table
       OriginalVariableNames            Smith        Johnson      Williams 
    ____________________________    _____________    ________    __________

    {'Gender'                  }    {'Male'     }    {'Male'}    {'Female'}
    {'Age'                     }    {[       38]}    {[  43]}    {[    38]}
    {'Smoker'                  }    {[        1]}    {[   0]}    {[     0]}
    {'Systolic'                }    {[      124]}    {[ 109]}    {[   125]}
    {'Diastolic'               }    {[       93]}    {[  77]}    {[    83]}
    {'SelfAssessedHealthStatus'}    {'Excellent'}    {'Fair'}    {'Good'  }

Входные аргументы

свернуть все

Входная таблица, заданная как таблица или расписание.

Аргументы пары «имя-значение»

Укажите дополнительные пары, разделенные запятыми Name,Value аргументы. Name является именем аргумента и Value - соответствующее значение. Name должен отображаться внутри кавычек. Можно указать несколько аргументов пары имен и значений в любом порядке как Name1,Value1,...,NameN,ValueN.

Пример: 'VariableNamingRule','preserve' сохраняет оригинальные имена, взятые из T1, без изменения их на действительные идентификаторы MATLAB ®.

Переменная в T1 который содержит имена переменных, указанные как пара, разделенная запятыми, состоящая из 'VariableNamesSource' и символьный вектор, строковый скаляр, положительное целое число или логический вектор. rows2vars функция интерпретирует значение 'VariableNamesSource' как показано в таблице.

Значение 'VariableNamesSource'

Значение

Вектор символов или строковый скаляр

Имя переменной во входной таблице T1.

Целое число n

n-я переменная в T1.

Логический вектор, длина которого равна количеству переменных в T1

n-й элемент - 1 (true), соответствующий n-я переменная T1. Все остальные элементы 0 (false).

В то время как значение 'VariableNamesSource' должен быть именем, числом или логическим массивом, указывающим табличную переменную, сама переменная может иметь любой тип данных с этими ограничениями.

  • Значения, содержащиеся в указанной переменной таблицы, должны иметь тип данных, позволяющий преобразовывать значения в строки. Например, значение 'VariableNamesSource' может быть именем переменной таблицы, содержащей datetime массив, потому что datetime значения могут быть преобразованы в строки.

  • Количество имен, взятых из указанной переменной таблицы, должно соответствовать количеству строк входной таблицы.

Выбранные переменные из T1, указанная как пара, разделенная запятыми, состоящая из 'DataVariables' и символьный вектор, клеточный массив символьных векторов, строковый массив, положительное целое число, вектор положительных целых чисел, логический вектор или объект подстрочного индекса. rows2vars функция выбирает переменные, указанные значением 'DataVariables' и переориентирует только эти переменные, чтобы они стали строками T2. Остальные переменные T1 отбрасываются.

Правило именования переменных в T2, указанная как пара, разделенная запятыми, состоящая из 'VariableNamingRule' и либо значение 'modify' или 'preserve'.

Значения 'VariableNamingRule' укажите следующие правила именования переменных в выходной таблице или расписании.

Значение 'VariableNamingRule'

Правило

'modify' (по умолчанию)

Измените имена, взятые из входной таблицы или расписания, так, чтобы имена соответствующих переменных в выходных данных также были действительными идентификаторами MATLAB.

'preserve'

Сохраните исходные имена, взятые из входной таблицы или расписания. Имена соответствующих переменных в выходных данных могут содержать любые символы Юникода ®, включая пробелы и символы, не относящиеся к ASCII.

Примечание: В некоторых случаях rows2vars должен изменять исходные имена, даже когда 'preserve' является правилом. К таким случаям относятся:

  • Повторяющиеся имена

  • Имена, конфликтующие с именами табличных измерений

  • Имена, конфликтующие с зарезервированным именем.

  • Имена, длина которых превышает значение namelengthmax.

Расширенные возможности

.
Представлен в R2018a