R 如何获取值高于阈值的行数+;列索引约束?
我有以下R数据帧:R 如何获取值高于阈值的行数+;列索引约束?,r,dataframe,R,Dataframe,我有以下R数据帧: S.A1 S.A2 S.A3 S.B1 S.B2 S.B3 Loc1 0.3809 0.4444 0.5000 0.0011 0.0110 0.0003 Loc2 0.1762 0.2500 0.3333 0.5000 0.3250 0.2333 Loc3 0.2147 0.3500 0.2500 0.1428 0.2142 0.3000 Loc4 0.2382 0.4010 0.2222 0.3000 0.3095 0.3667 Lo
S.A1 S.A2 S.A3 S.B1 S.B2 S.B3
Loc1 0.3809 0.4444 0.5000 0.0011 0.0110 0.0003
Loc2 0.1762 0.2500 0.3333 0.5000 0.3250 0.2333
Loc3 0.2147 0.3500 0.2500 0.1428 0.2142 0.3000
Loc4 0.2382 0.4010 0.2222 0.3000 0.3095 0.3667
Loc5 0.0001 0.0120 0.0035 0.3333 0.4523 0.3333
Loc6 0.0095 0.0400 0.0490 0.1000 0.2321 0.1000
。。。还有更多的排
我希望仅在几个预定义的列上获取值>=0.05的行数
例如:
- 有多少行仅在S.A1、S.A2和S.A3列上显示值>=0.05? 答案是统一:这是Loc1
- 相反,有多少行仅在S.B1、S.B2和S.B3列上显示值>=0.05?答案是两个
干杯:)不太清楚你想要什么,但我想你想要这个:
library(dplyr)
df = data.frame(S.A1 = runif(6),
S.A2 = runif(6),
S.A3 = runif(6),
S.B1 = runif(6),
S.B2 = runif(6),
S.B3 = runif(6))
因为您没有提供可复制的示例,我冒昧地制作了df。这看起来像:
S.A1 S.A2 S.A3 S.B1 S.B2 S.B3
1 0.7050447 0.3425170 0.24222797 0.89027284 0.6516980 0.12141078
2 0.5982959 0.9922373 0.87056458 0.43965606 0.6688127 0.05517046
3 0.9416712 0.5065097 0.01904794 0.08972336 0.6339239 0.63476302
4 0.8578870 0.7158088 0.28133235 0.02191547 0.6814373 0.50473500
5 0.5962874 0.8617246 0.04189701 0.59269613 0.6201409 0.32715440
6 0.1642811 0.2287726 0.76770094 0.22238414 0.9873463 0.06580177
然后我们选择有问题的列,并说所有这些列都需要大于或等于某个截止值(在本例中为0.05),然后得到行数
df %>% select(S.A1,S.A2, S.A3) %>% filter(S.A1 >= .05 & S.A2 >= 0.05 & S.A3 >= 0.05) %>% nrow()
df %>% select(S.B1,S.B2, S.B3) %>% filter(S.B1 >= .05 & S.B2 >= 0.05 & S.B3 >= 0.05) %>% nrow()
这将产生:
4
和5一个选项是在选定列上使用dplyr::filter\u,如下所示:
library(tidyverse)
df %>% rownames_to_column() %>%
filter_at(vars(starts_with("S.A")), any_vars(. >= 0.50))
# rowname S.A1 S.A2 S.A3 S.B1 S.B2 S.B3
# 1 Loc1 0.3809 0.4444 0.5 0.0011 0.011 3e-04
df %>% rownames_to_column() %>%
filter_at(vars(starts_with("S.B")), any_vars(. >= 0.050))
# rowname S.A1 S.A2 S.A3 S.B1 S.B2 S.B3
# 1 Loc2 0.1762 0.250 0.3333 0.5000 0.3250 0.2333
# 2 Loc3 0.2147 0.350 0.2500 0.1428 0.2142 0.3000
# 3 Loc4 0.2382 0.401 0.2222 0.3000 0.3095 0.3667
# 4 Loc5 0.0001 0.012 0.0035 0.3333 0.4523 0.3333
# 5 Loc6 0.0095 0.040 0.0490 0.1000 0.2321 0.1000
注意:如果OP的目的是检查所有选定列上的条件,则一次可以将上述代码中的任何变量
替换为所有变量
数据:
df <- read.table(text =
"S.A1 S.A2 S.A3 S.B1 S.B2 S.B3
Loc1 0.3809 0.4444 0.5000 0.0011 0.0110 0.0003
Loc2 0.1762 0.2500 0.3333 0.5000 0.3250 0.2333
Loc3 0.2147 0.3500 0.2500 0.1428 0.2142 0.3000
Loc4 0.2382 0.4010 0.2222 0.3000 0.3095 0.3667
Loc5 0.0001 0.0120 0.0035 0.3333 0.4523 0.3333
Loc6 0.0095 0.0400 0.0490 0.1000 0.2321 0.1000",
header = TRUE, stringsAsFactors = FALSE)
非常感谢你们,亚当和MKR
我应该提到,我不希望选择S.A和S.B列都显示>0.05值的列,因为S.A和S.B是互斥的(至少我希望选择这种情况下的行)。但是,使用您建议的函数很容易实现
例如,使用dplyr
:
df %>% select(S.A1,S.A2, S.A3, S.B1, S.B2, S.B3) %>% filter(S.A1 >= 0.05 & S.A2 >= 0.05 & S.A3 >= 0.05 & S.B1 < 0.05 & S.B2 < 0.05 & S.B3 < 0.05) %>% nrow()
df %>% select(S.A1,S.A2, S.A3, S.B1, S.B2, S.B3) %>% filter(S.B1 >= 0.05 & S.B2 >= 0.05 & S.B3 >= 0.05 & S.A1 < 0.05 & S.A2 < 0.05 & S.A3 < 0.05) %>% nrow()
df%%>%选择(S.A1、S.A2、S.A3、S.B1、S.B2、S.B3)%%>%过滤器(S.A1>=0.05和S.A2>=0.05和S.A3>=0.05和S.B1<0.05和S.B2<0.05和S.B3<0.05)%%>%nrow()
df%%>%选择(S.A1、S.A2、S.A3、S.B1、S.B2、S.B3)%%>%过滤器(S.B1>=0.05和S.B2>=0.05和S.B3>=0.05和S.A1<0.05和S.A2<0.05和S.A3<0.05)%%>%nrow()
我只需要添加额外的条件,其中S.A应该全部>=0.05,但S.B<0.05,然后是相反的情况。我不知道如何使用tidyverse
做同样的事情,但MKR提供的建议肯定会对进一步的审讯或其他人有用
多谢各位 当查看S.A1、S.A2和S.A3Hi Adam时,我对Loc2、Loc3和Loc4如何不显示所有>=0.05的值感到困惑,我真的需要只计算在给定列类型上显示值>0.05的行,并且S.a和S.B是互斥的(我应该用这些术语提及这一点,如果可能,我将编辑我的原始帖子)。在这种情况下,Loc 2、3和4永远不会被计算为所有显示值均大于0.05,而不仅仅是在S.A(或S.B)列上。下面的答案提供了大量的资源!