Хотелось бы подсчитать, сколько строк на type
, если они удовлетворяют условиям x == 0
. Вроде как группа по в SQLУсловное число и группа по R
Ниже приведен пример данных
type x
search 0
NULL 0
public 0
search 1
home 0
home 1
search 0
Хотелось бы подсчитать, сколько строк на type
, если они удовлетворяют условиям x == 0
. Вроде как группа по в SQLУсловное число и группа по R
Ниже приведен пример данных
type x
search 0
NULL 0
public 0
search 1
home 0
home 1
search 0
Я предполагаю, что вы хотите найти количество строк, когда выполняется конкретное условие (когда переменная имеет некоторое значение).
Если это так, то я полагаю, что у вас есть «x» в качестве переменной, представленной в столбце. «x» может принимать несколько значений. Предположим, вы хотите найти, сколько строк есть в данных при х = 0. Это может быть сделано путем:
nrow(subset(data, x=="0")
«данных» имя объекта для набора данных в R
EDIT:
Теперь я вижу ваш отредактированный dataframe. Вы можете использовать это, чтобы решить вашу проблему:
table(data$type, data$x)
большое спасибо! Я знал, что есть очень простое решение :) – datacurious
Учитывая кадр данных, 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
Вы также мог бы сделать это с 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
Вы также можете использовать пакет 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
Учитывая ваши данные структурированы как кадр данных, следующий код имеет лучшее время работы, чем ответы, приведенные выше:
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 миллионом строк.
Не могли бы вы включить пример данных с кодом R? Я изо всех сил пытаюсь понять, о чем вы спрашиваете, и о том, как ваш пример подходит ... – CephBirk
При включении ввода образца также включайте желаемый результат. См. [Как сделать воспроизводимый пример] (http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example) – MrFlick