This question already has answers here:
R keep rows with at least one column greater than value
(3个答案)
Subsetting Rows with a Column Value Greater than a Threshold [duplicate]
(3个答案)
去年关闭。
我有一个像这样的数据框:
第一行是标题。我想过滤此数据帧,以便最终得到那些行,其中至少3列的计数均大于30
我做了这样的事情
但这将第1列到第6列求和,然后查看总和是否大于30。我想对每列> 30进行处理,然后从中选择3或更多的列数为30。因此,我的数据帧的输出应为
我怎样才能做到这一点?
谢谢
如果
(3个答案)
Subsetting Rows with a Column Value Greater than a Threshold [duplicate]
(3个答案)
去年关闭。
我有一个像这样的数据框:
GENE a1 a2 a3 b1 b2 b3
G1 862 817 923 1096 997 946
G2 443 410 421 448 417 388
G3 396 348 372 428 351 361
G4 350 319 310 394 295 311
G5 350 332 341 412 303 316
G6 377 369 397 462 330 351
G7 362 348 399 437 378 376
G8 332 312 398 387 372 332
G9 511 473 564 496 533 441
G10 42 54 48 24 19 17
G11 346 308 343 279 349 259
G12 273 255 265 199 270 206
G13 26 19 18 14 19 19
G14 17 9 10 8 9 11
G15 12 8 6 9 5 21
第一行是标题。我想过滤此数据帧,以便最终得到那些行,其中至少3列的计数均大于30
我做了这样的事情
data <- read.table("test.txt",header=TRUE,sep="\t",row.names=1)
data <- data[rowSums(data) > 30,]
但这将第1列到第6列求和,然后查看总和是否大于30。我想对每列> 30进行处理,然后从中选择3或更多的列数为30。因此,我的数据帧的输出应为
GENE a1 a2 a3 b1 b2 b3
G1 862 817 923 1096 997 946
G2 443 410 421 448 417 388
G3 396 348 372 428 351 361
G4 350 319 310 394 295 311
G5 350 332 341 412 303 316
G6 377 369 397 462 330 351
G7 362 348 399 437 378 376
G8 332 312 398 387 372 332
G9 511 473 564 496 533 441
G10 42 54 48 24 19 17
G11 346 308 343 279 349 259
G12 273 255 265 199 270 206
我怎样才能做到这一点?
谢谢
最佳答案
假设您的数据称为dat
,您可以像这样获得所需的行(假设GENE
具有行名,而不是实际的列):
dat[apply(dat, 1, function(x) sum(x > 30) >= 3), ]
如果
GENE
是数据框的实际列(并且是第一列),则可以在行选择中使用apply
而不是dat[, -1]
将其安全地从dat
计算中删除:dat[apply(dat[, -1], function(x) sum(x > 30) >= 3), ]