由于某种原因,我在使用%in%
运算符删除单个数据框中没有两个单独时间点值的主题时遇到了一个问题。我的数据框为长格式,并且具有以下类型:
Subject Group Timepoint word.RT
399 1 t1 979
399 1 t1 818
399 1 t1 761
399 1 t1 1066
399 1 t2 855
399 1 t2 1338
399 1 t2 834
399 1 t2 1018
数据位于简单的.csv文件中。
由于这项研究仍在进行中,并且缺少数据,因此某些受试者只有t1
数据,而其他受试者只有t2
数据。为了将仅具有t1
和t2
数据的主题子集化,我一直在使用(并在过去成功使用过)以下代码:
dat <- dat[dat$Subject[dat$Timepoint=="t1"] %in%
dat$Subject[dat$Timepoint=="t2"],]
dat <- dat[dat$Subject[dat$Timepoint=="t2"] %in%
dat$Subject[dat$Timepoint=="t1"],]
奇怪的是,这对某些主题有效,但不适用于其他主题,我什至有一个实例可以在一个主题上使用,然后我关闭R,重新加载所有内容,再试一次,它将不适用于它以前曾为之工作过的一些主题。我确保将每个主题的时间点编码为t1
或t2
,并且没有奇怪的格式化方式,就像某个地方的随机空间一样。人们在与%in%
操作员调和时会遇到这样的错误吗?
我会鼓励你学习和使用两种dplyr
或data.table
为这种事情。两种方法都可以很好地工作,但最好选择一个入门并熟悉它。两者都有他们的信徒。两者都会使您的生活变得无比轻松。我在这里显示两个选项。在这种情况下,也许dplyr看起来稍微简单一些,但是对于其他操作,data.table会更加简洁:
library(dplyr)
dat %>%
group_by(Subject) %>%
filter(all(c('t1','t2') %in% Timepoint))
library(data.table)
setDT(dat)[, both := all(c('t1','t2') %in% Timepoint), by = Subject][both == TRUE]
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句