gpt4 book ai didi

r - 具有 (1) ALL 和 (2) ANY 列大于特定值的子集行

转载 作者:行者123 更新时间:2023-12-03 19:58:19 27 4
gpt4 key购买 nike

我有一个带有 id 列的数据框和一些(可能很多)带有值的列,这里是“v1”、“v2”:

df <- data.frame(id = c(1:5), v1 = c(0,15,9,12,7), v2 = c(9,32,6,17,11))
# id v1 v2
# 1 1 0 9
# 2 2 15 32
# 3 3 9 6
# 4 4 12 17
# 5 5 7 11
  • 如何提取所有值都大于某个值的行,比如 10,它应该返回:
    #   id v1 v2
    # 2 2 15 32
    # 4 4 12 17
  • 如何提取任何(至少一个)值大于 10 的行:
    #   id v1 v2
    # 2 2 15 32
    # 4 4 12 17
    # 5 5 7 11
  • 最佳答案

    请参阅函数 all()any() 分别了解问题的第一部分和第二部分。 apply() 函数可用于在行或列上运行函数。 (MARGIN = 1 是行,MARGIN = 2 是列等)。请注意,在进行比较时,我在 apply() 上使用 df[, -1] 来忽略 id 变量。

    第1部分:

    > df <- data.frame(id=c(1:5), v1=c(0,15,9,12,7), v2=c(9,32,6,17,11))
    > df[apply(df[, -1], MARGIN = 1, function(x) all(x > 10)), ]
    id v1 v2
    2 2 15 32
    4 4 12 17

    第2部分:
    > df[apply(df[, -1], MARGIN = 1, function(x) any(x > 10)), ]
    id v1 v2
    2 2 15 32
    4 4 12 17
    5 5 7 11

    要查看发生了什么, x > 10 为每一行返回一个逻辑向量(通过 apply() 指示每个元素是否大于 10。如果输入向量的所有元素都是 all()TRUE 返回 TRUE 并且 FALSE 否则 any() 返回 TRUE 如果输入中的任何元素为 TRUEFALSE 如果全部为 FALSE

    然后我使用 apply() 调用产生的逻辑向量
    > apply(df[, -1], MARGIN = 1, function(x) all(x > 10))
    [1] FALSE TRUE FALSE TRUE FALSE
    > apply(df[, -1], MARGIN = 1, function(x) any(x > 10))
    [1] FALSE TRUE FALSE TRUE TRUE

    子集 df (如上所示)。

    关于r - 具有 (1) ALL 和 (2) ANY 列大于特定值的子集行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9856632/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com