我希望在某些条款中创建Contact.ID的子集,而不是其他条款。
为了更好地解释一下,这是我的数据集的快照:
df <- c(Contact.ID, Date.Time, Age, Gender, Attendance)
Contact.ID Date Time Age Gender Attendance Term
1 A 2012-10-06 18:54:48 37 Male 30 Term1
2 A 2013-03-12 20:50:18 37 Male 30 Term2
3 A 2013-05-24 20:18:44 37 Male 30 Term3
4 B 2012-11-15 16:58:15 27 Female 40 Term1
5 B 2012-12-23 10:57:02 27 Female 40 WB
6 B 2013-01-11 17:31:22 27 Female 40 Term2
7 B 2013-02-18 18:37:00 27 Female 40 Term2
8 C 2013-02-22 17:46:07 40 Male 5 Term2
9 C 2013-02-27 11:21:00 40 Male 5 Term2
10 D 2012-10-28 14:48:33 20 Female 12 Term1
我的问题是,我需要根据Contact.ID的
创建进一步的细分所以我想要创建的小组是:
仅限第1项 - &gt; ID仅出现在第1学期但未出现在任何其他学期(例如ID D)
仅限第2项---&gt; ID仅出现在第2学期但未出现在任何其他学期(例如ID C)
第1及第1期2 - &gt; ID仅在第1和第2项而不是第3项(例如,ID B)
第1及第1期2&amp; 3 - &gt;所有条款中都存在的ID(例如ID A)
我尝试过为subset
添加条件的不同方法,还尝试了df[ which ()]
种函数和subset(df, () & () & !())
,但我似乎无法正确使用它。
有什么建议吗?我真诚地感谢你的帮助。
答案 0 :(得分:1)
所以我不知道WB在您的数据集中是什么,但我认为您可以按照此代码填写您正在寻找的内容。我们基本上只需要过滤每个Contact.ID所在的唯一条款数量,然后确保条款正确。我不认为“WB”是其中一个术语,因为它看起来不像你。
library(data.table)
dat = read.table("clipboard", header = TRUE)
setDT(dat)
dat[ , 'Num_Unique_Terms' := uniqueN(Term[Term != "WB"]), by = Contact.ID]
term1 = dat[Num_Unique_Terms == 1 & Term == "Term1"]
term2 = dat[Num_Unique_Terms == 1 & Term == "Term2"]
terms12and3 = dat[Num_Unique_Terms == 3]
dat[ , 'All_1_or_2' := ifelse(all(Term[Term != "WB"] %in% c("Term1", "Term2")), 1, 0), by = Contact.ID]
dat[ , 'All_2_or_3' := ifelse(all(Term[Term != "WB"] %in% c("Term2", "Term3")), 1, 0), by = Contact.ID]
term1and2 = dat[All_1_or_2 == 1 & Num_Unique_Terms == 2]
term2and3 = dat[All_2_or_3 == 1 & Num_Unique_Terms == 2]