Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
dplyr:从子字符串的多个区域/字符进行变异_R_Dplyr_Mutate_Substr_Case When - Fatal编程技术网

dplyr:从子字符串的多个区域/字符进行变异

dplyr:从子字符串的多个区域/字符进行变异,r,dplyr,mutate,substr,case-when,R,Dplyr,Mutate,Substr,Case When,这里的初学者。当具有多个子字符串条件(10个字符串)时,尝试使用dplyr:mutate/case_。每个字符代表一个种族。例如,在字符串的1-3个位置中的任意一个位置上有“Y”,其余位置上有“N”的字符串将被定义为“拉丁裔”。我试图为一个字符串获取正确的代码,该字符串在1-3个位置中的任何一个位置都有一个“Y”,但在4-5个位置中的任何一个位置都有一个“Y”(“Asian”)。我想将其定义为“多民族”。如果您能提供正确的代码来创建一个结果为“多民族”的字符串,我们将不胜感激?非常感谢这个网站

这里的初学者。当具有多个子字符串条件(10个字符串)时,尝试使用dplyr:mutate/case_。每个字符代表一个种族。例如,在字符串的1-3个位置中的任意一个位置上有“Y”,其余位置上有“N”的字符串将被定义为“拉丁裔”。我试图为一个字符串获取正确的代码,该字符串在1-3个位置中的任何一个位置都有一个“Y”,但在4-5个位置中的任何一个位置都有一个“Y”(“Asian”)。我想将其定义为“多民族”。如果您能提供正确的代码来创建一个结果为“多民族”的字符串,我们将不胜感激?非常感谢这个网站

library(dplyr)

data = data.frame(APP_AC = c("YNNNNNNNNN",
                             "YYNNNNNNNN",
                             "YYYNNNNNNN",
                             "YNYNNNNNNN",
                             "NNNYNNNNNN",
                             "YNNYNNNNNN",
                             "NNNNNYNNNN",
                             "YNNNNYNNNY",
                             "NNNNNNNNNN"))

data %>% 
  mutate(ETHNICITY = case_when(
    str_sub(APP_AC,1,1) == "Y" ~ "Latino", 
    str_sub(APP_AC,2,2) == "Y" ~ "Latino",
    str_sub(APP_AC,3,3) == "Y" ~ "Latino",
    str_sub(APP_AC,4,4) == "Y" ~ "Asian",
    str_sub(APP_AC,5,5) == "Y" ~ "Asian",
    str_sub(APP_AC,6,6) == "Y" ~ "Black",
    str_sub(APP_AC,7,7) == "Y" ~ "Native_American_Alaskan",
    str_sub(APP_AC,8,8) == "Y" ~ "Pacific_Islander",
    str_sub(APP_AC,9,9) == "Y" ~ "Pacific_Islander",
    str_sub(APP_AC,10,10) == "Y" ~ "White",
    TRUE ~ "Unknown"))

    APP_AC     ETHNICITY
1   YNNNNNNNNN Latino
2   YYNNNNNNNN Latino
3   YYYNNNNNNN Latino
4   YNYNNNNNNN Latino
5   NNNYNNNNNN Asian
6   YNNYNNNNNN Asian
7   NNNNNYNNNN Black
8   YNNNNYNNNY Latino
9   NNNNNNNNNN Unknown
期望输出:

    APP_AC     ETHNICITY
1   YNNNNNNNNN Latino
2   YYNNNNNNNN Latino
3   YYYNNNNNNN Latino
4   YNYNNNNNNN Latino
5   NNNYNNNNNN Asian
6   YNNYNNNNNN Multi-Ethnic
7   NNNNNYNNNN Black
8   YNNNNYNNNY Multi-Ethnic
9   NNNNNNNNNN Unknown

您可以使用
str\u detect

library(dplyr)
library(stringr)

data %>% 
  mutate(ETHNICITY = case_when(
    str_count(APP_AC, 'Y') > 1 ~ "Multi-Ethnic",
    str_sub(APP_AC,1,1) == "Y" ~ "Latino", 
    str_sub(APP_AC,2,2) == "Y" ~ "Latino",
    str_sub(APP_AC,3,3) == "Y" ~ "Latino",
    str_sub(APP_AC,4,4) == "Y" ~ "Asian",
    str_sub(APP_AC,5,5) == "Y" ~ "Asian",
    str_sub(APP_AC,6,6) == "Y" ~ "Black",
    str_sub(APP_AC,7,7) == "Y" ~ "Native_American_Alaskan",
    str_sub(APP_AC,8,8) == "Y" ~ "Pacific_Islander",
    str_sub(APP_AC,9,9) == "Y" ~ "Pacific_Islander",
    str_sub(APP_AC,10,10) == "Y" ~ "White",
    TRUE ~ "Unknown"))

#      APP_AC    ETHNICITY
#1 YNNNNNNNNN       Latino
#2 NNNYNNNNNN        Asian
#3 YNNYNNNNNN Multi-Ethnic
#4 NNNNNYNNNN        Black
#5 NNNNNNNNNN      Unknown
类似地,您还可以将其他条件合并为一个条件,以缩短代码

data %>% 
  mutate(ETHNICITY = case_when(
    str_count(APP_AC, 'Y') > 1 ~ "Multi-Ethnic",
    str_detect(str_sub(APP_AC, 1, 3), 'Y') ~ "Latino",
    str_detect(str_sub(APP_AC, 4, 5), 'Y') ~ "Asian",
    str_sub(APP_AC,6,6) == "Y" ~ "Black",
    str_sub(APP_AC,7,7) == "Y" ~ "Native_American_Alaskan",
    str_detect(str_sub(APP_AC, 8, 9), 'Y') ~ "Pacific_Islander",
    str_sub(APP_AC,10,10) == "Y" ~ "White",
    TRUE ~ "Unknown"))

您可以使用
str\u detect

library(dplyr)
library(stringr)

data %>% 
  mutate(ETHNICITY = case_when(
    str_count(APP_AC, 'Y') > 1 ~ "Multi-Ethnic",
    str_sub(APP_AC,1,1) == "Y" ~ "Latino", 
    str_sub(APP_AC,2,2) == "Y" ~ "Latino",
    str_sub(APP_AC,3,3) == "Y" ~ "Latino",
    str_sub(APP_AC,4,4) == "Y" ~ "Asian",
    str_sub(APP_AC,5,5) == "Y" ~ "Asian",
    str_sub(APP_AC,6,6) == "Y" ~ "Black",
    str_sub(APP_AC,7,7) == "Y" ~ "Native_American_Alaskan",
    str_sub(APP_AC,8,8) == "Y" ~ "Pacific_Islander",
    str_sub(APP_AC,9,9) == "Y" ~ "Pacific_Islander",
    str_sub(APP_AC,10,10) == "Y" ~ "White",
    TRUE ~ "Unknown"))

#      APP_AC    ETHNICITY
#1 YNNNNNNNNN       Latino
#2 NNNYNNNNNN        Asian
#3 YNNYNNNNNN Multi-Ethnic
#4 NNNNNYNNNN        Black
#5 NNNNNNNNNN      Unknown
类似地,您还可以将其他条件合并为一个条件,以缩短代码

data %>% 
  mutate(ETHNICITY = case_when(
    str_count(APP_AC, 'Y') > 1 ~ "Multi-Ethnic",
    str_detect(str_sub(APP_AC, 1, 3), 'Y') ~ "Latino",
    str_detect(str_sub(APP_AC, 4, 5), 'Y') ~ "Asian",
    str_sub(APP_AC,6,6) == "Y" ~ "Black",
    str_sub(APP_AC,7,7) == "Y" ~ "Native_American_Alaskan",
    str_detect(str_sub(APP_AC, 8, 9), 'Y') ~ "Pacific_Islander",
    str_sub(APP_AC,10,10) == "Y" ~ "White",
    TRUE ~ "Unknown"))

已更新,包括注释和更新问题中描述的逻辑

代码

data %>% 
  mutate(ETHNICITY = case_when(
    str_detect(substr(APP_AC, 1, 3),"Y") & str_count(substr(APP_AC, 4, 10), "Y") == 0 ~ "Latino", 
    str_detect(substr(APP_AC, 1, 3),"Y") & str_count(substr(APP_AC, 4, 10), "Y") >= 1 ~ "Multi-Ethnic", 
    str_detect(substr(APP_AC, 4, 5),"Y")  ~ "Asian", 
    str_detect(substr(APP_AC, 6, 6),"Y") ~ "Black",
    str_detect(substr(APP_AC, 7, 7),"Y") ~ "Native_American_Alaskan",
    str_detect(substr(APP_AC, 8, 9),"Y") ~ "Pacific_Islander",
    str_detect(substr(APP_AC, 10, 10),"Y") ~ "White",
    TRUE ~ "Unknown")
  )
输出

      APP_AC    ETHNICITY
1 YNNNNNNNNN       Latino
2 YYNNNNNNNN       Latino
3 YYYNNNNNNN       Latino
4 YNYNNNNNNN       Latino
5 NNNYNNNNNN        Asian
6 YNNYNNNNNN Multi-Ethnic
7 NNNNNYNNNN        Black
8 YNNNNYNNNY Multi-Ethnic
9 NNNNNNNNNN      Unknown

已更新,包括注释和更新问题中描述的逻辑

代码

data %>% 
  mutate(ETHNICITY = case_when(
    str_detect(substr(APP_AC, 1, 3),"Y") & str_count(substr(APP_AC, 4, 10), "Y") == 0 ~ "Latino", 
    str_detect(substr(APP_AC, 1, 3),"Y") & str_count(substr(APP_AC, 4, 10), "Y") >= 1 ~ "Multi-Ethnic", 
    str_detect(substr(APP_AC, 4, 5),"Y")  ~ "Asian", 
    str_detect(substr(APP_AC, 6, 6),"Y") ~ "Black",
    str_detect(substr(APP_AC, 7, 7),"Y") ~ "Native_American_Alaskan",
    str_detect(substr(APP_AC, 8, 9),"Y") ~ "Pacific_Islander",
    str_detect(substr(APP_AC, 10, 10),"Y") ~ "White",
    TRUE ~ "Unknown")
  )
输出

      APP_AC    ETHNICITY
1 YNNNNNNNNN       Latino
2 YYNNNNNNNN       Latino
3 YYYNNNNNNN       Latino
4 YNYNNNNNNN       Latino
5 NNNYNNNNNN        Asian
6 YNNYNNNNNN Multi-Ethnic
7 NNNNNYNNNN        Black
8 YNNNNYNNNY Multi-Ethnic
9 NNNNNNNNNN      Unknown

是的,我正在寻找的东西,将解决任何字符串与多个“Y”值(即“ynnnnnny”,“yynnnnnyy”),这可能有上述6个民族的任何变化。有没有一个简单的方法可以做到这一点?多谢各位@Russ ThomasHi@DIFC,我更新了最后一行,使用
str\u count
来更新出现两次或两次以上
Y
的任何字符串。请尝试一下,让我知道这是否适用于您的数据。感谢您的帮助@Russ Thomas,只是字符串的前3个位置中的两个位置可能有“Y”,那么字符串仍应定义为“拉丁美洲人”,而不是“多民族”。只是想澄清一下:1-3(“拉丁裔”),4-5(“亚裔”)等等。谢谢。代码更新为地址1-3(“拉丁裔”),4-5(“亚裔”)。因此,如果任何字符串有一个以上的
Y
,那将永远是
多民族的
?Russ Thomas,@Ronak Shah:你的答案组合帮助我找到了答案。非常惊讶你们知道这么多-非常感谢!是的,我正在寻找的东西,将解决任何字符串与多个“Y”值(即“ynnnnnny”,“yynnnnnyy”),这可能有上述6个民族的任何变化。有没有一个简单的方法可以做到这一点?多谢各位@Russ ThomasHi@DIFC,我更新了最后一行,使用
str\u count
来更新出现两次或两次以上
Y
的任何字符串。请尝试一下,让我知道这是否适用于您的数据。感谢您的帮助@Russ Thomas,只是字符串的前3个位置中的两个位置可能有“Y”,那么字符串仍应定义为“拉丁美洲人”,而不是“多民族”。只是想澄清一下:1-3(“拉丁裔”),4-5(“亚裔”)等等。谢谢。代码更新为地址1-3(“拉丁裔”),4-5(“亚裔”)。因此,如果任何字符串有一个以上的
Y
,那将永远是
多民族的
?Russ Thomas,@Ronak Shah:你的答案组合帮助我找到了答案。非常惊讶你们知道这么多-非常感谢!谢谢@Ronak Shah,我正在寻找能够处理任何具有多个“Y”值(即“ynnnnnny”、“yynnnnnyy”)的字符串的内容,这些字符串可能具有上述6个民族的任何变体,并将被定义为“多民族”。有没有一个简单的方法可以做到这一点?谢谢。@DIFC在这种情况下,您可以使用
str\u count
。请参阅更新的答案。感谢您的帮助@Ronak Shah,只是字符串在前3个位置中的两个位置可能有一个“Y”,那么字符串仍应定义为“拉丁美洲人”,而不是“多民族”。只是想澄清一下:1-3(“拉丁裔”),4-5(“亚裔”)等等。感谢you@DIFC,如果位置1-3都是“Y”,那将被归类为什么?i、 e.
yyynnnnn
。您能否在您的输入和预期输出中添加更具体的示例,以满足这些不同的附加要求?谢谢@Ronak Shah我正在寻找能够解决任何具有多个“Y”值的字符串(即“Ynnnnny”、“YYnnnnnyy”)的内容,这些字符串可能具有上述6个民族的任何变体,并将被定义为“多民族”. 有没有一个简单的方法可以做到这一点?谢谢。@DIFC在这种情况下,您可以使用
str\u count
。请参阅更新的答案。感谢您的帮助@Ronak Shah,只是字符串在前3个位置中的两个位置可能有一个“Y”,那么字符串仍应定义为“拉丁美洲人”,而不是“多民族”。只是想澄清一下:1-3(“拉丁裔”),4-5(“亚裔”)等等。感谢you@DIFC,如果位置1-3都是“Y”,那将被归类为什么?i、 e.
yyynnnnn
。您能否在输入和预期输出中添加更具体的示例,以满足这些不同的附加需求?