消除具有相同ID但条件代码不同的行(1或2)

时间:2016-07-16 17:05:18

标签: r duplicates

我有超过一千名参与者的大型数据集。每个参与者都有一个唯一的ID。每次参与者测试时,他们的数据都会在另一行中输入。参与者在两个条件下进行了测试" 1"和" 2"。一些参与者总是在条件1下进行测试。有些参与者总是在条件2下进行测试。还有其他参与者在条件1和2下进行了测试。

对于此分析,我想要消除在两种不同条件下测试的参与者,仅保留在相同条件下始终进行测试的参与者。

我必须找到具有相同ID(显示相同参与者)但不同条件代码的行并删除这些行。我熟悉子集,但我不知道如何在这种情况下创建我需要的数据子集。

任何帮助将不胜感激。

1 个答案:

答案 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,然后在清理中删除这些行)