我有以下内容:
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) 我有一个数据集,我希望在第一个观察年中删除第一个月的几个人的出现.有可能用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)
一如既往,所有帮助赞赏!:)
我有一个数据集,缩写在这里:
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,然后从那里进行分组?
一旦我隔离了这些区域,我就能继续前进.
任何建议表示赞赏!
所以基本上我有一个名为"参数"的列表,其值为(x1,x2,...,xj).我想通过for循环子集这个列表,但每次都省略一个元素.所以例如我希望第一个子集(通过for循环的第一次迭代)是(x2,x3,...,xj),然后是(x1,x3,...,xj),所以on,直到最后一个子集(x1,x2,...,xj-1).我该怎么做呢?
我有dt
和dt1
data.table
s.
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) list1:[1,2,3,4,5]
list2:[1,2,3]
Run Code Online (Sandbox Code Playgroud)
如何检查list2是否是list1的子集?我尝试了containsAll(),但只要列表2中的元素存在于list1中,它就会成立.我想要与标准相同的顺序而不仅仅是元素.
假设我有一个列表列表,如下所示(实际列表更长):
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']
.
我目前的解决方案如下所示.我首先使用ifilter
并imap
为每个列表可能具有的超集创建生成器.然后对于那些有超集的情况,我使用compress
并imap
放弃它们.
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) 我有一个具有不同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,或者是否有另一个我可以使用的函数?
先感谢您!
我的数据看起来像这样:
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) 我有以下简单的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"] …
subset ×10
r ×8
data.table ×4
group-by ×1
if-statement ×1
intervals ×1
java ×1
linked-list ×1
list ×1
object ×1
plyr ×1
python ×1
python-2.7 ×1
superset ×1
vector ×1