然后匹配两列中的值,然后基于R中返回的新值

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了然后匹配两列中的值,然后基于R中返回的新值相关的知识,希望对你有一定的参考价值。

我在数据框中的这些列看起来像:

combination  color_1  color_2

1_1          red       red
1_2          red       blue
1_3          red       green
1_4          red       yellow
2_1          blue      red
2_2          blue      blue
2_3          blue      green
2_4          blue      yellow
... 

基于匹配color_1和color_2的值,我希望能够创建输出匹配结果的新列。 对此有某些规定。对于“红色”和“红色”相同的第一行,新列中的输出(例如“仅红色”)应为“ 1”,然后每隔两个匹配项为“ 2”。然后,我将重复此代码,但接着选择出现“蓝色”和“蓝色”的匹配项,以在下一列(例如“仅蓝色”)中输出“ 1”,并在其他任何地方输出“ 2”。这适用于仅黄色的匹配,仅绿色的匹配等。因此,根据条件,最后我将有4个额外的列。

感谢您的提前帮助!

答案

您可以使用ifelse。如果循环很多,则是个好主意

cols <- data.frame(
color_1=c("Red","Red","Red","Red","Blue","Blue","Blue","Blue"),
color_2=c("Red","Blue","Green","Yellow","Red","Blue","Green","Yellow")
) 

cols$redonly <- ifelse( cols$color_1 %in% "Red" & cols$color_2 %in% "Red" , 1 ,2 )
cols$Blueonly <- ifelse( cols$color_1 %in% "Blue" & cols$color_2 %in% "Blue" , 1 ,2 )
cols$greeonly <- ifelse( cols$color_1 %in% "Green" & cols$color_2 %in% "Green" , 1 ,2 )
另一答案

使用dplyr,我们可以使用case_when

library(tidyverse)


df %>% 
  mutate(test = case_when(
    color_1 == "red" & color_2 == "red" ~ "red-only",
    color_1 == "blue" & color_2 == "blue" ~ "blue-only",
    TRUE ~ "mixed"
  ))
#>   combination color_1 color_2      test
#> 1         1_1     red     red  red-only
#> 2         1_2     red    blue     mixed
#> 3         1_3     red   green     mixed
#> 4         1_4     red  yellow     mixed
#> 5         2_1    blue     red     mixed
#> 6         2_2    blue    blue blue-only
#> 7         2_3    blue   green     mixed
#> 8         2_4    blue  yellow     mixed

数据

df <- read.csv(text = 
"combination,color_1,color_2
1_1,red,red
1_2,red,blue
1_3,red,green
1_4,red,yellow
2_1,blue,red
2_2,blue,blue
2_3,blue,green
2_4,blue,yellow", header = TRUE)

以上是关于然后匹配两列中的值,然后基于R中返回的新值的主要内容,如果未能解决你的问题,请参考以下文章

根据条件验证R中两个数据框之间的列中的值

基于两列中的值合并其他列中的值

匹配两列中的单元格值,如果匹配,则将另一个值复制到空白单元格

Excel - 如何比较 2 列中的单元格,然后如果 B 列匹配,则使用 B 列中匹配单元格旁边的 C 列中的值?

在R中,我如何用regex逐行比较两列中的模式行和不匹配行?

如何在 r 的范围内返回 .csv 列中的值的数量