我正在嘗試按條件創建新列,如果 A 中的值等于 1,則從 B 列復制值,否則從 C 列復制。當 A 有 NA 時,條件不起作用。我不想洗掉此 NA 并執行以下操作:如果 A 包含 NA,則必須從 C 列中獲取值
df <- data.frame (A = c(1,1,NA,2,2,2),
B = c(10,20,30,40,25,45),
C = c(11,23,33,45,56,13))
#If Customer faced defect only in Wave_3 his Boycotting score is taken from wave 3, otherwise from wave 4
df$D1 <- ifelse(df$A ==1 , df$B ,df$C)
預期輸出:

uj5u.com熱心網友回復:
在此處使用布爾運算:
df$D1 <- ifelse(df$A ==1 & !is.na(df$A), df$B ,df$C)
另一種方法是
df$D1 <- ifelse(is.na(df$A), df$C, ifelse(df$A ==1 , df$B ,df$C))
uj5u.com熱心網友回復:
與@Mohanasundaram 相同的想法,但在dplyr鏈中實作:
library(dplyr)
df %>%
mutate(D1 = ifelse(A == 1 & !is.na(A), B, C))
輸出:
A B C D1
1 1 10 11 10
2 1 20 23 20
3 NA 30 33 33
4 2 40 45 45
5 2 25 56 56
6 2 45 13 13
uj5u.com熱心網友回復:
使用case_when
library(dplyr)
df %>%
mutate(D1 = case_when(A %in% 1 ~ B, TRUE ~ C))
A B C D1
1 1 10 11 10
2 1 20 23 20
3 NA 30 33 33
4 2 40 45 45
5 2 25 56 56
6 2 45 13 13
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/475976.html
