2

何千行ものデータ フレームがありますが、サンプルを以下に示します。

     userid     event
1     123        view
2     123        view
3     123       order
4     345        view
5     345        view
6     345        view
7     345       order
8     111        view
9     111       order
10    111        view
11    111        view
12    111        view
13    333        view
14    333        view
15    333        view

dput(データ)

structure(list(userid = c(123, 123, 123, 345, 345, 345, 345, 
111, 111, 111, 111, 111, 333, 333, 333), eventaction = structure(c(2L, 
2L, 1L, 2L, 2L, 2L, 1L, 2L, 1L, 2L, 2L, 2L, 2L, 2L, 2L), .Label = c("order", 
"view"), class = "factor")), .Names = c("userid", "event"
), row.names = c(NA, -15L), class = "data.frame")

私が見ているのは、イベントの下に「注文」という単語を含むユーザーIDのすべての行を抽出することです。eventaction には注文エントリが含まれていないため、結果には userid = 333 を除く userid のすべての行が含まれます。

2 番目のタスクは、注文エントリの前に「ビュー」の発生回数をカウントすることです。ヘルプとポインタに感謝します。

ありがとう。

4

4 に答える 4

3

で試すことができdata.tableます。'data.frame' を 'data.table' に変換 ( setDT(data))、'userid' でグループ化、'userid' に'order' でifあるany'event' があり、Data.table' のサブセットを返す ( .SD)

library(data.table)
setDT(data)[,if(any(event=="order")) .SD , by = userid]

または を使用してdplyr、 「userid」でグループ化した後、「イベント」filterany「順序」を指定します。

library(dplyr)
data %>%
    group_by(userid) %>%
    filter(any(event == "order"))
于 2016-09-14T15:12:56.330 に答える
0

あなたはこれを行うことができます:

df[df$userid %in% df[df$event=="order",]$userid,]

またはsubset:

subset(df, df$userid %in% subset(df, event=="order")$userid)

ORmatch関数:

subset(df, match(df$userid, subset(df, event=="order")$userid, nomatch = 0)>0)

またはsqldfライブラリを使用:

library(sqldf)
sqldf("select * from df where df.userid in (select df.userid from df where df.event=='order')")

   # userid event
# 1     123  view
# 2     123  view
# 3     123 order
# 4     345  view
# 5     345  view
# 6     345  view
# 7     345 order
# 8     111  view
# 9     111 order
# 10    111  view
# 11    111  view
# 12    111  view
于 2016-09-14T15:29:19.603 に答える
0

標準の R で、data.frame を呼び出す場合mydat:

myusers <- mydat[mydat$event == "order", "userid"]
mydat[mydat$userid %in% myusers,]
于 2016-09-14T15:26:24.903 に答える