кадр данных подмножества на основе процента

у меня есть фрейм данных, который содержит такие данные:

V1 V2 V3
1  2  0.34
1  3  0.31
1  4  0.12
1  5  0.12

кадр данных больше, но это пример.

я хочу взять подмножество этого фрейма данных, которое имеет самые низкие 20% V3.

как это можно сделать?

Спасибо за помощь


person smack    schedule 06.06.2011    source источник


Ответы (2)


Функция subset() удобна тем, что (помимо других преимуществ) она позволяет избежать многократного упоминания имени фрейма данных:

subset(dataFrame, V3 <= quantile(V3, 0.2))
person Prasad Chalasani    schedule 06.06.2011
comment
@Prasad Chalasani: спасибо за помощь, я попробую, но как мне убедиться, что это дает нужные результаты? и даст ли он самые низкие 20% значений V3: S, извините за много вопросов, но я новичок в R - person smack; 06.06.2011
comment
@smack: Если вы используете мой ответ, у вас будет объект «ss», который вы можете сравнить с исходным фреймом данных «dataFrame». Следующие две величины должны быть (примерно) одинаковыми: length(row.names(dataFrame))/5 и length(row.names(ss)). - person Jubbles; 06.06.2011
comment
@smack вы можете проверить это на примере фрейма данных, где столбец V3 содержит последовательность целых чисел 1:100 - person Prasad Chalasani; 06.06.2011
comment
@Prasad Chalasani: я проверил это, как вы предложили, и это сработает, спасибо :) - person smack; 06.06.2011
comment
почему бы не использовать dataframe [квантиль (V3, 0,2) ‹ = V3,3]? - person Manoel Galdino; 06.06.2011
comment
@Manoel - как может работать ваш синтаксис? Нам нужно квалифицировать V3 внутри [..] с именем фрейма данных, например dataFrame$V3 и т. д. - person Prasad Chalasani; 06.06.2011
comment
Извините, правильный код: dataframe[V3‹=quantile(V3, 0.2)]. V3‹=quantile(V3, 0.2) возвращает false/true для каждой строки, верно? Итак, просто используйте оператор [, чтобы разделить эти строки. Спецификация столбца в моем примере не важна. Просто используйте df = dataframe[V3‹=quantile(V3, 0.2),] - person Manoel Galdino; 07.06.2011
comment
@Manoel - ваш код не будет работать: вы имеете в виду V3 внутри [..], поэтому вы получите сообщение об ошибке «Объект V3 не найден». Код будет работать только в том случае, если вы уже выполнили attach(dataFrame), поэтому этот подход требует двух операторов. Кроме того, вы всегда должны быть осторожны при выполнении attach() - это затрудняет отслеживание того, какие переменные видимы, а какие маскируются и т. д. - person Prasad Chalasani; 07.06.2011
comment
@Prasad Chalasani: если я хочу взять 10 самых низких баллов ошибки, как это можно сделать ?? - person smack; 07.06.2011
comment
@smack - не уверен, что вы имеете в виду под наименьшими 10 баллами ошибки ...? - person Prasad Chalasani; 07.06.2011
comment
Не нужно прикреплять. Просто используйте dataframe$V3. Или использовать с... В любом случае, я просто публикую другую возможность и предпочитаю использовать [, чем подмножество в этом случае... Но я думаю, это вопрос вкуса... - person Manoel Galdino; 07.06.2011
comment
@Manoel - хорошо, я понял, я понял твой код буквально. Конечно, это сработает, если вы скажете [dataFrame$V3 ... ], или вы можете сделать with(dataFrame, dataFrame[ V3 <= quantile(V3,.2), ]. Оба этих подхода требуют упоминания имени фрейма данных дважды, и я предпочитаю subset, потому что вы упоминаете его только один раз. - person Prasad Chalasani; 07.06.2011
comment
@Prasad Chalasani: извините, я имею в виду самые низкие 10 баллов V3 - person smack; 07.06.2011
comment
@smack: ты можешь сделать subset(dataFrame, rank(V3) <= 10 ) - person Prasad Chalasani; 07.06.2011

person    schedule
comment
@smack: Если вы не возражаете, прочитайте meta.stackexchange.com/questions/49000/ - person Jubbles; 06.06.2011
comment
@smack: meta.stackexchange.com/questions/74557/ (особенно предпочтение пользователю, ответившему первым) - person Jubbles; 06.06.2011