我有以下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
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
…还有更多的行!
我想得到我有值的行数。
例如:
列类型S.A和S.B相互排斥,因此永远不会选择Loc2、Loc3和Loc4,因为这些都显示值
我减少了列的数量,因此可以为进一步的选择手动预定义列索引(或名称),但是,我不知道如何处理来选择显示超过某个阈值的值的行,同时还对可能出现这些值的列添加约束。
欢迎任何建议!
干杯:)
非常感谢亚当和MKR。
我应该提到,我不想选择同时显示S.A和S.B列的列
例如,使用< code>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()
我只需要添加额外的条件,其中S.A应该是全部
非常感谢!
一个选项是对选定列使用<code>dplyr::filter_at</code>作为:
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的目的是检查所有选定列上的条件,则once可以将上述代码中的all_vars
替换为any_var
。
数据:
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)
不知道你想要什么,但我想你想要这个:
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
本文向大家介绍如何基于R数据帧列的值获取行索引?,包括了如何基于R数据帧列的值获取行索引?的使用技巧和注意事项,需要的朋友参考一下 R数据帧的一行可以在列中具有多种方式,并且这些值可以是数字,逻辑,字符串等。基于行号查找值很容易,但是基于值查找行号却很不同。如果要在特定列中查找特定值的行号,则可以提取整行,这似乎是一种更好的方法,可以使用单个方括号来获取行的子集。 示例 请看以下数据帧- 输出结果
我有数据,我想应用滚动函数来检测哪个点的值大于特定阈值。 我想要的是找到下一个2个值高于某个阈值(例如30)的行。这将产生以下结果: 我有一个大的数据集(几百万行),所以我试图找到一个有效的解决方案。也许使用?由reprex包(v0.2.1)在2019-02-26创建
我有一个2D麻木阵列: 如何获取大于的元素的索引? 现在,我正在做以获取每个最大值的索引,结果是:。我如何实现上述操作?
我需要找到我的数据连续几天达到阈值的位置。我正在寻找超过阈值的4个连续观察值。我想返回符合这些标准的系列的第一个观察值的位置。 下面是一个数据集示例: 我想要平均符合标准的日期(平均 在这种情况下,我可以将第一种情况下的< code>TRUE作为答案,但如果第二种、第三种或第四种情况不是< code>TRUE,这将不起作用 我需要条件为的第一个日期: 以及该系列中第一个观察的位置: 我已经找到了相
问题内容: 我有一个像这样的数组: 如果用户将“ Designation2”作为输入,则代码应返回。 这可能是一个非常简单的问题,但是我是Java的新手。因此,请提出一些建议。 问题答案: 您可以遍历数组中的字符串,并找到与您要查找的字符串匹配的索引。
问题内容: 我有以下独特的约束 我正在尝试防止两个问题处于活动状态时具有相同的问题编号(IS_ACTIVE值= 1)。 一切似乎都很好,直到我第二次不得不提一个问题。 我需要仅在IS_ACTIVE = 1时应用约束 问题答案: 您可以创建一个基于函数的唯一索引 这利用了以下事实:Oracle b树索引不存储数据,而叶块数据将完全为NULL。