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))\nRun 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 在这里做错了什么/如何导航的任何帮助。
\nDATA2 <- 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)\nRun Code Online (Sandbox Code Playgroud)\n
我们可能会使用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)