【问题标题】:Compare elements in two strings for conditional selection in R比较两个字符串中的元素以在 R 中进行条件选择
【发布时间】:2021-09-17 20:48:55
【问题描述】:

我有以下包含三个变量的数据集:

X<-c(0.1,0.3,0.3,0.4,0.8,0.8,1.1,1.2,1.3,1.6,2.1,2.2,2.3,2.4,2.6,2.8,3.1,3.3,3.4,4.1,4.4,4.4,4.5,5.0,5.1,5.2,5.3,5.4,5.4,5.7,6.2,6.5,6.6,6.7,6.7,7.0,7.4,7.5,7.8,7.8,8.6,9.5,9.8,11.1,11.9)

Y<-c("ac","bcd","ac","ab","ab","d","ab","ab","cd","bcd","d","ad","ad","d","ad","ad","ad","ab","ad","a", "ad","ac","a", "bcd", "ac","d", "ac","ac","bcd","ab", "ab","ab","cd","ac","ad","ab","d","d", "ab","d", "d", "bcd","a", "a","d")

Z<-c("ac","bcd", "ab","ac","ab","cd","ac","ac","bcd" ,"cd","bcd" ,"ac","ac","bcd","ab","bcd", "bcd", "a", "ab","ab","cd","a", "ac","ac","bcd" ,"ad","bcd", "bcd" ,"ab","bcd",
"bcd", "bcd", "ac","cd","a", "cd","ac","ac","cd","ab","ab","a", "bcd", "cd","a")

df<-data.frame(X,Y,Z)
  1. 第一步是确定 Y 和 Z 中是否存在相同的字母。
  2. 第二步可以使用ifelse 来选择在 Y 和 Z 列中都包含字母的最小 X 值和在 Y 或 Z 列中不包含字符的最大 X 值。

最终结果应该是:

6.7, 7.0

【问题讨论】:

    标签: r if-statement compare tidyverse stringr


    【解决方案1】:

    使用来自this previous answer 的代码,我认为这应该可行:

    library(stringr)
    
    X<-c(0.1,0.3,0.3,0.4,0.8,0.8,1.1,1.2,1.3,1.6,2.1,2.2,2.3,2.4,2.6,2.8,3.1,3.3,3.4,4.1,4.4,4.4,4.5,5.0,5.1,5.2,5.3,5.4,5.4,5.7,6.2,6.5,6.6,6.7,6.7,7.0,7.4,7.5,7.8,7.8,8.6,9.5,9.8,11.1,11.9)
    
    Y<-c("ac","bcd","ac","ab","ab","d","ab","ab","cd","bcd","d","ad","ad","d","ad","ad","ad","ab","ad","a", "ad","ac","a", "bcd", "ac","d", "ac","ac","bcd","ab", "ab","ab","cd","ac","ad","ab","d","d", "ab","d", "d", "bcd","a", "a","d")
    
    Z<-c("ac","bcd", "ab","ac","ab","cd","ac","ac","bcd" ,"cd","bcd" ,"ac","ac","bcd","ab","bcd", "bcd", "a", "ab","ab","cd","a", "ac","ac","bcd" ,"ad","bcd", "bcd" ,"ab","bcd",
         "bcd", "bcd", "ac","cd","a", "cd","ac","ac","cd","ab","ab","a", "bcd", "cd","a")
    
    df<-data.frame(X,Y,Z)
    
    df$YZ <- gsub(" ", "", paste(df$Y, df$Z))
    
    df$unique <- !sapply(df$YZ, function(x) any(str_count(x, letters)>1))
    
    print(max(df[df$unique == FALSE,]$X))
    print(min(df[df$unique == TRUE,]$X))
    
    [1] 6.7
    [1] 7
    

    【讨论】:

      【解决方案2】:

      我认为“在 Y 和 Z 中都包含字母的最小 X 值”应该是 0.1。

      头部(df) X Y Z YZ 独特 1 0.1 ac ac acac FALSE 2 0.3 bcd bcd bcdbcd 假 3 0.3 ac ab acab FALSE 4 0.4 ab ac abac FALSE 5 0.8 ab ab ab FALSE 6 0.8 d cd dcd FALSE

      Y 和 Z 中的 Y='ac', Z='ac', 'a'

      【讨论】:

      • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-04
      • 2021-09-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多