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

Переориентируйте его так, чтобы его строки стали переменными в выходе. The 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, можно взять имена из таблицы входа или timetable и использовать их как имена переменных в таблице выхода без изменений. Чтобы сохранить исходные имена, используйте '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

The nвторая переменная в T1.

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

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

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

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

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

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

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

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

Значение 'VariableNamingRule'

Правило

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

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

'preserve'

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

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

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

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

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

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

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

.
Введенный в R2018a