Извлечь подмножество кадра данных на основе условия, включающего поле - PullRequest
55 голосов
/ 10 августа 2010

У меня большой CSV с результатами медицинского обследования из разных мест (местоположение является фактором, присутствующим в данных). Поскольку некоторые анализы относятся к конкретному месту и для удобства, я бы хотел извлечь подкадры со строками только из этих мест. Бывает, что расположение - это самое первое поле, так что да, я мог бы сделать это, отсортировав строки CSV, но я хотел бы узнать, как это сделать в R, поскольку я уверен, что это понадобится для других столбцов.

Итак, в двух словах, вопрос заключается в следующем: учитывая фрейм данных foo, как я могу создать еще одну фрейм данных, который содержит только строки из foo, где foo$location = 'there'?

Ответы [ 2 ]

93 голосов
/ 10 августа 2010

Вот два основных подхода. Я предпочитаю этот для его читабельности:

bar <- subset(foo, location == "there")

Обратите внимание, что вы можете связать вместе много условных выражений с помощью & и | для создания сложных подмножеств.

Второй подход - индексирование. Вы можете индексировать строки в R с помощью числовых или логических срезов. foo$location == "there" возвращает вектор значений T и F, длина которого равна длинам строк foo. Вы можете сделать это, чтобы вернуть только те строки, в которых условие возвращает true.

foo[foo$location == "there", ]
1 голос
/ 01 октября 2018

Просто чтобы расширить ответ выше, вы также можете индексировать столбцы, а не указывать имена столбцов, что также может быть полезно в зависимости от того, что вы делаете. Учитывая, что ваше местоположение является первым полем, оно будет выглядеть так:

    bar <- foo[foo[ ,1] == "there", ]

Это полезно, потому что вы можете выполнять операции со значением столбца, например, циклически повторять определенные столбцы (и вы можете делать то же самое, индексируя номера строк).

Это также полезно, если вам нужно выполнить какую-либо операцию над несколькими столбцами, поскольку вы можете указать диапазон столбцов:

    foo[foo[ ,c(1:N)], ]

Или конкретные столбцы, как и следовало ожидать.

    foo[foo[ ,c(1,5,9)], ]
...