簡體   English   中英

DataFrame 中多列的 Ifelse

[英]Ifelse for Multiple Columns in DataFrame

我有一個如下所示的數據集:

ID 冬天 春天 夏天 落下
1 高的 不適用 高的 低的
2 低的 高的 不適用 低的
3 低的 不適用 不適用 低的
4 低的 高的 不適用 低的

我想添加一個計算列,以便如果任何冬季、春季、夏季和秋季列包含“高”,則將“1”添加到該行,如下所示。 否則它將包含 0。

ID 冬天 春天 夏天 落下 計算列
1 高的 不適用 高的 低的 1
2 低的 高的 不適用 低的 1
3 低的 不適用 不適用 低的 0
4 低的 高的 不適用 低的 1

到目前為止,我有這樣的事情,我知道這是不正確的。 我不確定如何指定多列而不僅僅是一列:

df$calculated_column <- ifelse(c(2:5)=="High",1,0)

我們可以使用if_any

library(dplyr)
df1 <- df1 %>%
     mutate(calculated_column = +(if_any(-ID, ~ . %in% 'high')))

-輸出

df1
 ID Winter Spring Summer Fall calculated_column
1  1   high   <NA>   high  low                 1
2  2    low   high   <NA>  low                 1
3  3    low   <NA>   <NA>  low                 0
4  4    low   high   <NA>  low                 1

或者,如果我們想使用base RrowSums在邏輯矩陣上使用rowSums創建邏輯條件

df1$calculated_column <-  +(rowSums(df1[-1] == "high", na.rm = TRUE) > 0)

數據

df1 <- structure(list(ID = 1:4, Winter = c("high", "low", "low", "low"
), Spring = c(NA, "high", NA, "high"), Summer = c("high", NA, 
NA, NA), Fall = c("low", "low", "low", "low")), 
class = "data.frame", row.names = c(NA, 
-4L))

你也可以這樣做:

df1$calculated_column = +grepl('high', do.call(paste, df1))
df1
  ID Winter Spring Summer Fall calculated_column
1  1   high   <NA>   high  low                 1
2  2    low   high   <NA>  low                 1
3  3    low   <NA>   <NA>  low                 0
4  4    low   high   <NA>  low                 1

這是一個base R解決方案:

calculated_column = (apply(df1,1,function(x) sum(grepl("high",x)))>0)*1

cbind(df1, calculated_column) 
  ID Winter Spring Summer Fall calculated_column
1  1   high   <NA>   high  low                 1
2  2    low   high   <NA>  low                 1
3  3    low   <NA>   <NA>  low                 0
4  4    low   high   <NA>  low                 1

暫無
暫無

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

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