根据其他各种列值中的值创建新列 - 使用 R

lof*_*s77 5 r dplyr

DATA <- data.frame(\n  LONDON= c(2,0,1,3,0,1), \n  STOKE = c(45, 40, 6, 22, 16, 10), \n  DERBY = c(5, 9, 8, 9, 2, 3), \n  NEWCASTLE = c(7, 6, 4, 10, 12, 8),\n  MANCHESTER = c(2, 12, 1, 7, 8, 3),\n  WATFORD = c(9, 2, 4, 6, 13, 6),\n  KENT = c(1, 3, 23, 7, 12, 2),\n  SURREY = c(2, 8, 4, 5, 1, 4),\n  ESSEX = c(4, 12, 7, 9, 5, 1),\n  HULL = c(1,3, 2, 4, 3, 1))\n
Run Code Online (Sandbox Code Playgroud)\n

我想创建一个“NEW_COL”列,它根据四个不同的值列表示“YES”或“NO”。当 DERBY 或 NEWCASTLE 或 SURREY > 7 或当 KENT 或 HULL = 2 时,我希望新列有一个“YES”(否则有一个 \xe2\x80\x98NO\xe2\x80\x99)\n我也想要“ NEW_COL”列成为我的数据集中的第二列。

\n

我以为像这样(如下)的事情就可以做到这一点,但事实并非如此。关于我\xe2\x80\x99m 在这里做错了什么/如何导航的任何帮助。

\n
DATA2 <- DATA %>% mutate(NEW_COL = ifelse(rowSums(select(., DERBY:NEWCASTLE) > 7 | select(., SURREY >7)  | select(., KENT == 2) | select(., HULL == 2), na.rm = TRUE), 'Yes', 'No'), .before = 2)\n
Run Code Online (Sandbox Code Playgroud)\n

akr*_*run 4

我们可能会使用if_any.before来改变立场

library(dplyr)
DATA <- DATA %>% 
    mutate(NEW_COL = c("NO", "YES")[1 + 
        (if_any(c(DERBY, NEWCASTLE, SURREY), `>`, 7)|
       if_any(c(KENT, HULL), `==`, 2))], .before = 2)
Run Code Online (Sandbox Code Playgroud)

-输出

DATA
   LONDON NEW_COL STOKE DERBY NEWCASTLE MANCHESTER WATFORD KENT SURREY ESSEX HULL
1      2      NO    45     5         7          2       9    1      2     4    1
2      0     YES    40     9         6         12       2    3      8    12    3
3      1     YES     6     8         4          1       4   23      4     7    2
4      3     YES    22     9        10          7       6    7      5     9    4
5      0     YES    16     2        12          8      13   12      1     5    3
6      1     YES    10     3         8          3       6    2      4     1    1
Run Code Online (Sandbox Code Playgroud)