2014-09-25 2 views
1

Хотелось бы подсчитать, сколько строк на type, если они удовлетворяют условиям x == 0. Вроде как группа по в SQLУсловное число и группа по R

Ниже приведен пример данных

type x  
search 0 
NULL  0 
public 0 
search 1 
home  0 
home  1 
search 0 
+1

Не могли бы вы включить пример данных с кодом R? Я изо всех сил пытаюсь понять, о чем вы спрашиваете, и о том, как ваш пример подходит ... – CephBirk

+0

При включении ввода образца также включайте желаемый результат. См. [Как сделать воспроизводимый пример] (http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example) – MrFlick

ответ

8

Я предполагаю, что вы хотите найти количество строк, когда выполняется конкретное условие (когда переменная имеет некоторое значение).

Если это так, то я полагаю, что у вас есть «x» в качестве переменной, представленной в столбце. «x» может принимать несколько значений. Предположим, вы хотите найти, сколько строк есть в данных при х = 0. Это может быть сделано путем:

nrow(subset(data, x=="0") 

«данных» имя объекта для набора данных в R

EDIT:

Теперь я вижу ваш отредактированный dataframe. Вы можете использовать это, чтобы решить вашу проблему:

table(data$type, data$x) 
+0

большое спасибо! Я знал, что есть очень простое решение :) – datacurious

2

Учитывая кадр данных, df=data.frame(type=c('search','NULL','public','search','home','home','search'),x=c(0,0,0,1,0,1,0))

Если вы хотите знать, сколько из каждого значения в столбце 1 имеют значение в столбце 2 нуля, то вы можете использовать: table(df)[,1]

до тех пор, пока вы работаете только с 1 и 0, чтобы получить ответ:

home NULL public search 
    1  1  1  2 
1

Вы также мог бы сделать это с dplyr пакетом:

library(dplyr) 

df2 <- df %>% group_by(x,type) %>% tally() 

, который дает:

x type n 
1 0 home 1 
2 0 NULL 1 
3 0 public 1 
4 0 search 2 
5 1 home 1 
6 1 search 1 
3

Вы также можете использовать пакет sqldf :

library(sqldf) 
df <- data.frame(type=c('search','NULL','public','search','home','home','search'),x=c(0,0,0,1,0,1,0)) 
sqldf("SELECT type, COUNT(*) FROM df WHERE x=0 GROUP BY type") 

, который дает следующий результат:

type COUNT(*) 
1 NULL  1 
2 home  1 
3 public  1 
4 search  2 
0

Учитывая ваши данные структурированы как кадр данных, следующий код имеет лучшее время работы, чем ответы, приведенные выше:

nrow(data[data$x=="0"]) 

Вы можете проверить свой бег время:

ptm <- proc.time() 
nrow(subset(data, x == "0")) 
proc.time() - ptm 

ptm <- proc.time() 
nrow(data[data$x=="0"])) 
proc.time() - ptm 

В моем случае время работы было примерно в 15 раз быстрее, с 1 миллионом строк.

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