[英]How can I create a new column with values 1/0, where the value in the new column is 1 only if values in two other columns are both 1?
我在 DF 中有兩列,“濕”和“冷”,值分別為 1 和 0,例如:
Wet Cold
1 1
0 1
0 1
1 0
1 1
0 0
我想創建一個新列 wet&cold,只有當 wet=1和cold=1 時,wet&cold=1。 如果其中任何一個或兩個都為 0 或不匹配,則 wet&cold=0。
我嘗試使用 grepl 解決問題,但沒有成功。
基地R解決方案
df$`wet&cold` <- df$Wet*df$Cold
df
Wet Cold wet&cold
1 1 1 1
2 0 1 0
3 0 1 0
4 1 0 0
5 1 1 1
6 0 0 0
dplyr 解決方案
df %>%
mutate(`wet&cold`=Wet*Cold)
Wet Cold wet&cold
1 1 1 1
2 0 1 0
3 0 1 0
4 1 0 0
5 1 1 1
6 0 0 0
另一種選擇是檢查所有行值的所有列的值為 1,然后使用as.integer
將 TRUE/FALSE 轉換為 1/0,如下所示:
df$wet_cold = as.integer(rowSums(df == 1) == ncol(df))
df
#> Wet Cold wet_cold
#> 1 1 1 1
#> 2 0 1 0
#> 3 0 1 0
#> 4 1 0 0
#> 5 1 1 1
#> 6 0 0 0
創建於 2023-01-18,使用reprex v2.0.2
其他解決方案適用於巧妙的乘法。 這也許是一個使用ifelse()
的更通用的解決方案,它適用於這兩種情況。
df <- data.frame(
wet = c(1, 0, 0, 1, 1, 0),
cold = c(1, 1, 1, 0, 1, 0)
)
df$wet_cold <- ifelse(df$wet == 1 & df$cold == 1, 1, 0)
df
# df
# wet cold wet_cold
# 1 1 1 1
# 2 0 1 0
# 3 0 1 0
# 4 1 0 0
# 5 1 1 1
# 6 0 0 0
您可以使用&
檢查兩者是否為 1 並使用 + 將TRUE
或FLASE
轉換為1
和0
。
DF["wet&cold"] <- +(DF$wet & DF$cold)
#DF
# wet cold wet&cold
#1 1 1 1
#2 0 1 0
#3 0 1 0
#4 1 0 0
#5 1 1 1
#6 0 0 0
對於超過兩列的兩種更通用的方法以及除1
之外的其他條件。
DF["wet&cold"] <- +(apply(DF==1, 1, all))
DF["wet&cold"] <- +(rowSums(DF != 1) == 0)
數據
DF <- data.frame(wet = c(1, 0, 0, 1, 1, 0), cold = c(1, 1, 1, 0, 1, 0))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.