比较两个字符串中的元素以在 R 中进行条件选择

Compare elements in two strings for conditional selection in R

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

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 到 select 最小 X 值,其中包含 Y 和 Z 中的字母,最大 X 值不包含任何一个字符Y 或 Z 列。

最终结果应该是:

6.7, 7.0

使用 中的代码,我认为这应该可行:

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

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

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

Y='ac'、Z='ac'、'a' Y 和 Z