gpt4 book ai didi

r - 在 R 中使用匹配和应用

转载 作者:行者123 更新时间:2023-12-04 18:00:26 26 4
gpt4 key购买 nike

> df = data.frame(id = 1:5, ch_1 = 11:15,ch_2= 10:14,selection = c(11,13,12,14,12))
> df
id ch_1 ch_2 selection
1 1 11 10 11
2 2 12 11 13
3 3 13 12 12
4 4 14 13 14
5 5 15 14 12

鉴于此数据集,我需要一个遵循规则的附加列:
  • 如果选择是两个选择(ch_1 和 ch_2)之一,则返回选择的编号(1 或 2)
  • 如果选择的不是这两个选项,则返回 3

  • 我需要一种方法来为每一行执行此操作。对于单行,执行以下代码可以正常工作,但我似乎找不到将它与 apply 一起使用的方法将其运行到数据帧的每一行。寻找一种可以应用于多于两列且运行速度比执行传统循环更快的解决方案
    df=df[1,]

    if (df$selection %in% df[,paste("ch_",1:2,sep="")]) {
    a = which(df[,paste("ch_",1:2,sep="")]==df$selection)
    } else {
    a = 3
    }
    # OR
    ifelse(df$selection %in% df[,paste("ch_",1:2,sep="")],1,3)
    # OR
    match(df$selection,df[,paste("ch_",1:2,sep="")])

    最佳答案

    使用 == 将向量与其他列进行比较, 添加最后一列总是 TRUE ,然后取第一个 TRUE 的索引在每一行中使用 max.col

    max.col(cbind(df$selection == df[c("ch_1","ch_2")], TRUE), "first")
    #[1] 1 3 2 1 3

    这应该很容易扩展到 n 列。

    关于r - 在 R 中使用匹配和应用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59166078/

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