我有一個表稱爲myTable
(輸入):排序表的唯一參數
user_name session_num
1 "Joe" 1
2 "Tom" 2
3 "Fred" 1
4 "Tom" 1
5 "Joe" 2
6 "John" 1
我想知道有多少我user_id
有只有session_num = 1
(輸出):
user_name session_num
1 "Fred" 1
2 "John" 1
我有一個表稱爲myTable
(輸入):排序表的唯一參數
user_name session_num
1 "Joe" 1
2 "Tom" 2
3 "Fred" 1
4 "Tom" 1
5 "Joe" 2
6 "John" 1
我想知道有多少我user_id
有只有session_num = 1
(輸出):
user_name session_num
1 "Fred" 1
2 "John" 1
下面是使用data.table
library(data.table)
setDT(df)[, if(all(session_num == 1)) .SD, by = user_name]
# user_name session_num
# 1: Fred 1
# 2: John 1
另一種選擇是嘗試反聯接
df[session_num == 1][!df[session_num != 1], on = "user_name"]
# user_name session_num
# 1: Fred 1
# 2: John 1
這是2行答案:
library(data.table)
data1<-fread("test.csv")
data1[user_name == names(which(table(data1$user_name)==1)),][session_num==1,]
首先看看誰在數據集中只有一次,然後是其中的那些子集,其中session_num==1
。
如果更換''==用'%在%''後你user_name'得到預期的結果。隨着data.table(v1.9.6)的最新正式版本的發佈,代碼會引發錯誤。 – RHertel
不確定這個答案使用了哪個'data.table'特定功能。 –
或者我們可以簡單地排除具有比1
其他會話號的所有用戶可能的解決方案,使用base
R.
# User's with session number other than 1
two <- myTable$user_name[myTable$session_num != 1]
# Exclude them
myTable[!myTable$user_name %in% two,]
# user_name session_num
#3 Fred 1
#6 John 1
有趣的是,我們想到了這漂亮很多同時。儘管我認爲使用'!= 1'而不是'== 2'更安全,以涵蓋所有可能性。 –
Thx它很棒! – Smasell
您可能還想閱讀[this](https://github.com/Rdatatable/data.table/wiki/Getting-started)以便更加舒適地使用'data.table' –