标签: subset

我在data.table中的参数(计算结果为逻辑的表达式)

我有以下内容:

test <- data.table(id=1:11, t=c(rep(1:2,5), 3))
test[length(unique(id))>1,list(id, t), by=t]

    id t
 1:  1 1
 2:  2 2
 3:  3 1
 4:  4 2
 5:  5 1
 6:  6 2
 7:  7 1
 8:  8 2
 9:  9 1
10: 10 2
11: 11 3
Run Code Online (Sandbox Code Playgroud)

我预计这组test通过t,评估j每个组语句,返回其中的行i是真实的(即有超过1个唯一ID)。而是返回以下内容:

> test
     id t
 1:  1 1
 2:  2 2
 3:  3 1
 4:  4 2
 5:  5 1
 6:  6 2
 7:  7 1
 8:  8 …
Run Code Online (Sandbox Code Playgroud)

group-by r subset data.table

3
推荐指数
1
解决办法
791
查看次数

使用ifelse从R中的数据集中删除不需要的行

我有一个数据集,我希望在第一个观察年中删除第一个月的几个人的出现.有可能用ifelse做到这一点吗?就像是:

ifelse(ID=="1" & Month=="11" and Year=="2006", "remove these rows",  
  ifelse(ID=="2" & Month=="11" & Year=="2007", "remove these rows",   
         "nothing"))  
Run Code Online (Sandbox Code Playgroud)

一如既往,所有帮助赞赏!:)

if-statement r subset

3
推荐指数
1
解决办法
8277
查看次数

基于多列隔离数据区域

我有一个数据集,缩写在这里:

SNP chr       BP log10   PPA
rs10068  17 56555 1.16303 0.030
rs10032  17 56561 26.364 0.975
rs10354  17 34951 4.3212 0.626
rs10043  17 20491 0.00097 0.006
rs10457  17 69572 -0.38403 0.014
rs10465  17 69872 8.19547 0.927
Run Code Online (Sandbox Code Playgroud)

其中PPA是后关联概率.由于我有一些较高的log10值(> 6),我想确定这些区域周围的可靠间隔,以确定它们的确有多大或多小.

为此,我首先想要识别log10> 6的SNP,使用子集这很简单.

newdata <- subset(data, log10 > 6)
Run Code Online (Sandbox Code Playgroud)

然而,我还想在这个子集中包括物理上靠近这些先导SNP的SNP,使用BP 500 +/-前导SNP的BP(log10> 6).在这里,我不确定最好的方法.这是我可以解决的问题,subset还是我应该首先在原始数据中识别这些主要SNP,然后从那里进行分组?

一旦我隔离了这些区域,我就能继续前进.

任何建议表示赞赏!

r subset intervals

3
推荐指数
1
解决办法
181
查看次数

如何通过选择列表中除一个值之外的所有元素来对R中的列表进行子集化?

所以基本上我有一个名为"参数"的列表,其值为(x1,x2,...,xj).我想通过for循环子集这个列表,但每次都省略一个元素.所以例如我希望第一个子集(通过for循环的第一次迭代)是(x2,x3,...,xj),然后是(x1,x3,...,xj),所以on,直到最后一个子集(x1,x2,...,xj-1).我该怎么做呢?

r list vector object subset

3
推荐指数
2
解决办法
4209
查看次数

使用另一个data.table子集data.table

我有dtdt1 data.tables.

dt<-data.table(id=c(rep(2, 3), rep(4, 2)), year=c(2005:2007, 2005:2006), event=c(1,0,0,0,1))
dt1<-data.table(id=rep(2, 5), year=c(2005:2009), performance=(1000:1004))

dt

   id year event
1:  2 2005     1
2:  2 2006     0
3:  2 2007     0
4:  4 2005     0
5:  4 2006     1

dt1

   id year performance
1:  2 2005        1000
2:  2 2006        1001
3:  2 2007        1002
4:  2 2008        1003
5:  2 2009        1004
Run Code Online (Sandbox Code Playgroud)

我想使用第一列和第二列的组合来对前者进行子集化dt1.因此,我想创建一个没有覆盖的新对象dt.这是我想要获得的.

   id year event
1:  2 2005     1
2:  2 2006 …
Run Code Online (Sandbox Code Playgroud)

r subset data.table

3
推荐指数
1
解决办法
305
查看次数

如何检查列表是否是另一个列表的子集

list1:[1,2,3,4,5]
list2:[1,2,3]
Run Code Online (Sandbox Code Playgroud)

如何检查list2是否是list1的子集?我尝试了containsAll(),但只要列表2中的元素存在于list1中,它就会成立.我想要与标准相同的顺序而不仅仅是元素.

java linked-list subset

3
推荐指数
2
解决办法
1万
查看次数

从Python中的列表中删除列表子集的最快方法

假设我有一个列表列表,如下所示(实际列表更长):

fruits = [['apple', 'pear'],
          ['apple', 'pear', 'banana'],
          ['banana', 'pear'],
          ['pear', 'pineapple'],
          ['apple', 'pear', 'banana', 'watermelon']]
Run Code Online (Sandbox Code Playgroud)

在这种情况下,在列表中的所有项目['banana', 'pear'],['apple', 'pear']并且['apple', 'pear', 'banana']都包含在列表中['apple', 'pear', 'banana', 'watermelon'](项目的顺序并不重要),所以我想删除['banana', 'pear'],['apple', 'pear']以及['apple', 'pear', 'banana']因为它们的子集['apple', 'pear', 'banana', 'watermelon'].

我目前的解决方案如下所示.我首先使用ifilterimap为每个列表可能具有的超集创建生成器.然后对于那些有超集的情况,我使用compressimap放弃它们.

from itertools import imap, ifilter, compress

supersets = imap(lambda a: list(ifilter(lambda x: len(a) < len(x) and set(a).issubset(x), fruits)), fruits)


new_list = list(compress(fruits, imap(lambda x: …
Run Code Online (Sandbox Code Playgroud)

python subset python-itertools superset python-2.7

3
推荐指数
1
解决办法
2038
查看次数

返回在R中建立"最接近的值"的行

我有一个具有不同ID的数据框,我想创建一个子组,其中:对于每个ID,我将只获得一行,其中最接近的值为0.5,在变量Y中.

这是我的数据框:

df <- data.frame(ID=c("DB1", "BD1", "DB2", "DB2", "DB3", "DB3", "DB4", "DB4", "DB4"), X=c(0.04, 0.10, 0.10, 0.20, 0.02, 0.30, 0.01, 0.20, 0.30), Y=c(0.34, 0.49, 0.51, 0.53, 0.48, 0.49, 0.49, 0.50, 1.0) )

这就是我想要的

ID X Y DB1 0.10 0.49 DB2 0.10 0.51 DB3 0.30 0.49 DB4 0.20 0.50

我知道我可以使用类似这样的东西添加ddply过滤器

ddply(df, .(ID), function(z) { z[z$Y == 0.50, ][1, ] })
如果在Y中总是有0.50的值,这将工作正常,但事实并非如此.

如何将==更改为"最接近"0.5,或者是否有另一个我可以使用的函数?

先感谢您!

r subset plyr

3
推荐指数
1
解决办法
2133
查看次数

按条件子集data.table但保留属于组的所有行

我的数据看起来像这样:

require("data.table")
dt1 <- data.table(
  code=c("A001", "A001","A001","A002","A002","A002","A002","A003","A003"),
  value=c(40,38,55,10,12,16,18,77,87))
Run Code Online (Sandbox Code Playgroud)

我想将其子集化,以便code保留包含超过或低于给定数字的值的任何group().例如,如果我想要任何包含超过50的值的组,那么结果将如下所示:

dt2 <- data.table(
  code=c("A001", "A001","A001","A003","A003"),
  value=c(40,38,55,77,87))
Run Code Online (Sandbox Code Playgroud)

r subset data.table

3
推荐指数
1
解决办法
30
查看次数

使用行号和值过滤器进行选择

我有以下简单的data.table“ test”。我想选择X等于“ A”的第3至8行的所有行:

library(data.table)
set.seed(1)
test <- data.table(X=c(rep("A",5),rep("B",5)),Y=rnorm(10),Z=rnorm(10))

test[3:8 & X == "A"] # gives the not desired output:

1: A -0.6264538  1.5117812
2: A  0.1836433  0.3898432
3: A -0.8356286 -0.6212406
4: A  1.5952808 -2.2146999
5: A  0.3295078  1.1249309
Warning message:
  In 3:8 & X == "A" :
  longer object length is not a multiple of shorter object length

# desired outcome:

3: A -0.8356286 -0.62124058
4: A  1.5952808 -2.21469989
5: A  0.3295078  1.12493092
Run Code Online (Sandbox Code Playgroud)

在3:8行之间,我只选择X ==“ A”的那些。这怎么可能?请注意,使用test[3:8][X == "A"] …

r subset data.table

3
推荐指数
1
解决办法
54
查看次数