У меня есть фрейм данных, который выглядит примерно так:
df <- as.data.frame(matrix(c("True Organic", "True Organic", NA, NA, NA, 0,
"True Organic", "True Organic", NA, NA, NA, 0,
"Organic Search (SEO)", "Induced Organic", NA, NA, NA, 0,
"Display", NA, NA, NA, NA, 0,
"Social Ads (Act)", "Induced Organic", "Induced Organic", NA, NA, 1,
"Referral", "Social Ads (Act)", NA, NA, NA, 0,
"Special Emails", "Induced Organic", NA, NA, NA, 1,
"Daily Email", "Daily Email", "Daily Email", NA, NA, 0), nrow = 8,
ncol = 6, byrow = TRUE, dimnames = list(NULL, c("Node_1", "Node_2",
"Node_3", "Node_4",
"Node_5", "conversion"))), ,
stringsAsFactors = FALSE)
df
Node_1 Node_2 Node_3 Node_4 Node_5 conversion
1 True Organic True Organic <NA> <NA> <NA> 0
2 True Organic True Organic <NA> <NA> <NA> 0
3 Organic Search (SEO) Induced Organic <NA> <NA> <NA> 0
4 Display <NA> <NA> <NA> <NA> 0
5 Social Ads (Act) Induced Organic Induced Organic <NA> <NA> 1
6 Referral Social Ads (Act) <NA> <NA> <NA> 0
7 Special Emails Induced Organic <NA> <NA> <NA> 1
8 Daily Email Daily Email Daily Email <NA> <NA> 0
Для каждой строки я хочу заменить все NA на строку "Null", если столбец преобразования для этой строки равен0 или с «Преобразованием», если столбец преобразования равен 1.
Мой окончательный вывод должен выглядеть следующим образом.
df_desired <- as.data.frame(matrix(c("True Organic", "True Organic", "Null", "Null", "Null", 0,
"True Organic", "True Organic", "Null", "Null", "Null", 0,
"Organic Search (SEO)", "Induced Organic", "Null", "Null", "Null", 0,
"Display", "Null", "Null", "Null", "Null", 0,
"Social Ads (Act)", "Induced Organic", "Induced Organic", "Conversion", "Conversion", 1,
"Referral", "Social Ads (Act)","Null", "Null", "Null", 0,
"Special Emails", "Induced Organic", "Converison", "Conversion", "Conversion", 1,
"Daily Email", "Daily Email", "Daily Email", "Null", "Null", 0), nrow = 8,
ncol = 6, byrow = TRUE, dimnames = list(NULL, c("Node_1", "Node_2",
"Node_3", "Node_4",
"Node_5", "conversion"))), ,
stringsAsFactors = FALSE)
df_desired
Node_1 Node_2 Node_3 Node_4 Node_5 conversion
1 True Organic True Organic Null Null Null 0
2 True Organic True Organic Null Null Null 0
3 Organic Search (SEO) Induced Organic Null Null Null 0
4 Display Null Null Null Null 0
5 Social Ads (Act) Induced Organic Induced Organic Conversion Conversion 1
6 Referral Social Ads (Act) Null Null Null 0
7 Special Emails Induced Organic Converison Conversion Conversion 1
8 Daily Email Daily Email Daily Email Null Null 0
Я могу сделать это с помощью вложенного цикла for.
for (i in 1:nrow(df)){
for (j in 1:ncol(df)){
df[i,j] <- ifelse(((is.na(df[i,j])) & df[i,]$conversion == "1"), "Conversion", df[i,j])
for (j in 1:ncol(df)){
df[i,j] <- ifelse(((is.na(df[i,j])) & df[i,]$conversion == "0"), "Null", df[i,j])
}
}
}
К сожалению, это плохо масштабируется.Должен быть лучший способ сделать это.Любые предложения будут ценны.Заранее спасибо!