2013-09-26 2 views
0

Я загрузил файл csv в r с использованием в основном двоичных данных. То, что я хочу сделать, это манипулировать данными в столбце «b» на основе соответствующей записи в столбце «a».Использование r для данных цикла и сопоставления

Например, мне бы хотелось пройти весь мой набор данных и для каждой строки с записью «1» в столбце 2, чтобы увидеть запись в столбце 3 в той же строке. Затем выясните, сколько из этих успешных запросов существует.

Аналогично, у меня есть несколько столбцов больших целых чисел, и мне бы хотелось подтвердить один из других двоичных столбцов, проверив, является ли одно из больших чисел большим, чем другое. Например, столбец «3» - это двоичный результат «Победа в домашней команде»? Затем у меня есть оценка игры в колонке «Счет домашней команды» и «Оценка команды гостей». Мне очень хотелось бы создать цикл, который будет видеть, будет ли запись в «победе в домашней команде» подтверждена записью в «домашней команде»> «оценка команды».

Спасибо

+1

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

+0

Пользователи R обычно используют векторизованные операции вместо циклов, потому что петли в R медленны, если они не очень просты. На самом деле все, что вам нужно, это суммирование булевых выражений в именах столбцов (объединение нескольких булевых выражений с '&'). Суммирование добавляет 'TRUE' как 1 и' FALSE' как 0 и, следовательно, количество совпадающих запросов. Измените свой вопрос с помощью набора данных образца, и вы получите более конкретный код ответа. – alistaire

ответ

1

Что-то вроде этого?

library(data.table) 
dataset <- data.table(
Homescore = c(2,4,8,0,3,2,3,4), 
Awayscore = c(3,2,3,4,2,4,8,0), 
Homewin = c(1,0,0,1,1,1,0,1) 
) 

NoOfSuccess <- dim(
dataset[Homescore > Awayscore & Homewin == 1] 
)[1] 

NoOfFailure <- dim(
dataset[Homescore > Awayscore & Homewin == 0] 
)[1] 

NoOfSuccess 
#[1] 2 
NoOfFailure 
#[1] 2 
+0

'dataset [, sum (Homescore> Awayscore & Homewin == 1)]' более эффективен, чем 'nrow (dataset [Homescore> Awayscore & Homewin == 1])'. Зачем создавать потенциально большой результат подмножества, просто для подсчета его строк? –

+0

@MatthewDowle - Я старался быть предельно ясным с точки зрения объяснения мыслительного процесса. Что касается эффективности кодирования, вы абсолютно правы. – TheComeOnMan

+0

А я вижу. Снова прочитав это, на самом деле довольно аккуратно, как новый пользователь (Dave) можно так быстро настроить с помощью синтаксиса 'data.table'. Нет набора из 11+ функций для изучения, вы просто придерживаетесь логики внутри '[]'. Это довольно легко, не так ли :) –

Смежные вопросы