[英]Create and assign multiple new dataframe columns in ifelse statement?
[英]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 R
, rowSums
在邏輯矩陣上使用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.