簡體   English   中英

檢查兩列的條件,如果為true,則操縱R中的第三列

[英]Checking a condition on two columns and if true manipulate a 3rd column in R

我一直在尋找解決此問題的方法,但找不到。 這有點類似於其他問題,因此,如果這是重復的,我表示歉意。

我希望檢查數據框上的兩個條件,並且當兩個條件都滿足時,請更改第三列。 通過一個示例可能更容易看到:

greetings <- c("Hello", "Howdy", "Hola")

df <- data.frame(
  Criteria_1 = c("Hello", "Hello", "Goodbye", "Goodbye", "Hello"),
  Criteria_2 = c("Yes", "No", "Yes", "No", "Yes"),
  Change_col = c(1,5,6,9,3))

 Criteria_1 Criteria_2 Change_col
1      Hello        Yes          1
2      Hello         No          5
3    Goodbye        Yes          6
4    Goodbye         No          9
5      Hello        Yes          3

我想檢查Criteria_1是否在變量“ greeting”中有一個值,以及Criteria_2是否為“是”。 當兩者都為真時,我想將“ Change_col”中的值更改為10。

這是我嘗試過的方法,但是它將所有Change_col值更改為10。

if(df$Criteria_1 %in% greetings & df$Criteria_2 == 'Yes'){
  df$Change_col <- '10'

我想我可能必須使用apply函數? 但不是很確定該怎么做。 所需的輸出將是這樣的:

  Criteria_1 Criteria_2 Change_col
1      Hello        Yes         10
2      Hello         No          5
3    Goodbye        Yes          6
4    Goodbye         No          9
5      Hello        Yes         10

我們可以使用邏輯表達式將“ Change_col”中的值更改為10

df$Change_col[with(df, Criteria_1 %in% greetings & Criteria_2 == "Yes")] <- 10
df
#  Criteria_1 Criteria_2 Change_col
#1      Hello        Yes         10
#2      Hello         No          5
#3    Goodbye        Yes          6
#4    Goodbye         No          9
#5      Hello        Yes         10

我認為dplyr::mutateifelse()語句提供了一個不錯的解決方案。 您是否嘗試過以下方法?

library(tidyverse)

newDf <- df %>%
   mutate(Change_col = ifelse(Criteria_1 %in% greetings & Criteria_2 == "Yes", 10, Change_col))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM