我有超过一千名参与者的大型数据集。每个参与者都有一个唯一的ID。每次参与者测试时,他们的数据都会在另一行中输入。参与者在两个条件下进行了测试" 1"和" 2"。一些参与者总是在条件1下进行测试。有些参与者总是在条件2下进行测试。还有其他参与者在条件1和2下进行了测试。
对于此分析,我想要消除在两种不同条件下测试的参与者,仅保留在相同条件下始终进行测试的参与者。
我必须找到具有相同ID(显示相同参与者)但不同条件代码的行并删除这些行。我熟悉子集,但我不知道如何在这种情况下创建我需要的数据子集。
任何帮助将不胜感激。
答案 0 :(得分:1)
在07-16 22:32:22.042 16896-16896/nf.co.riaah.chutte E/INFO: This is mainforput[]This is dataforput{}
07-16 22:32:22.042 16896-16896/nf.co.riaah.chutte E/ERROR: thisis the list for god's sake [First, Second, Second, First, Second]{}
07-16 22:32:22.042 16896-16896/nf.co.riaah.chutte E/RE: First Onion
07-16 22:32:22.042 16896-16896/nf.co.riaah.chutte E/RE: Second Broccoli
07-16 22:32:22.042 16896-16896/nf.co.riaah.chutte E/RE: Second Curd
07-16 22:32:22.042 16896-16896/nf.co.riaah.chutte E/RE: First Milk
07-16 22:32:22.042 16896-16896/nf.co.riaah.chutte E/RE: Second Carrot
07-16 22:32:22.042 16896-16896/nf.co.riaah.chutte I/System.out: Secondoldkey
07-16 22:32:22.042 16896-16896/nf.co.riaah.chutte E/LIST: SecondSecond
07-16 22:32:22.042 16896-16896/nf.co.riaah.chutte I/System.out: Secondoldkey
07-16 22:32:22.043 16896-16896/nf.co.riaah.chutte E/LIST: SecondFirst
07-16 22:32:22.043 16896-16896/nf.co.riaah.chutte I/System.out: Firstoldkey
07-16 22:32:22.043 16896-16896/nf.co.riaah.chutte E/LIST: SecondSecond
07-16 22:32:22.043 16896-16896/nf.co.riaah.chutte D/AndroidRuntime: Shutting down VM
07-16 22:32:22.044 16896-16896/nf.co.riaah.chutte E/AndroidRuntime: FATAL EXCEPTION: main
Process: nf.co.riaah.chutte, PID: 16896
java.util.ConcurrentModificationException
at java.util.Hashtable$HashIterator.nextEntry(Hashtable.java:727)
at java.util.Hashtable$EntryIterator.next(Hashtable.java:778)
at java.util.Hashtable$EntryIterator.next(Hashtable.java:776)
at nf.co.riaah.chutte.Result$ListFragment$CustomMap1.put(Result.java:184)
at nf.co.riaah.chutte.Result$ListFragment$CustomMap1.put(Result.java:177)
at java.util.Hashtable.putAll(Hashtable.java:425)
at nf.co.riaah.chutte.Result$ListFragment.doddata(Result.java:246)
at nf.co.riaah.chutte.Result$ListFragment.addtolist(Result.java:265)
at nf.co.riaah.chutte.Result$SetMap.onPostExecute(Result.java:1078)
at nf.co.riaah.chutte.Result$SetMap.onPostExecute(Result.java:996)
at android.os.AsyncTask.finish(AsyncTask.java:636)
at android.os.AsyncTask.access$500(AsyncTask.java:177)
at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:653)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:139)
at android.app.ActivityThread.main(ActivityThread.java:5298)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:950)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:745)
07-16 22:32:22.044 16896-16896/nf.co.riaah.chutte D/AppTracker: App Event: crash
07-16 22:32:22.080 16896-16896/nf.co.riaah.chutte I/Process: Sending signal. PID: 16896 SIG: 9
07-16 22:32:23.252 19872-19872/nf.co.riaah.chutte E/ThreadedRenderer: set Thread 19901 affinity cpu 3failed
data.table
library(data.table)
setDT(old_data)
new_data <- old_data[ , if (uniqueN(condition_code) == 1) .SD, by = participant_id]
将setDT
类添加到您的data.table
,以便将其传递给data.frame
方法。 data.table
等同于(但速度快于)uniqueN
,此语句确保只有一个与给定参与者关联的唯一条件代码(由length(unique())
标识)。
participant_id
是在每个组中创建的临时数据集。如果不进行进一步修改,.SD
只表示与特定.SD
关联的完整列和行,因此构造表示返回与participant_id
相关的所有数据通过您的条件;对于那些没有通过的人,不返回任何内容(技术上返回participant_id
,然后在清理中删除这些行)