Попробуй это. Если дисперсия равна 0, то новый столбец равен среднему значению. Если это не так, то новый столбец равен сумме уникальных значений (2,2,4 = 6). Если есть только одно не-NA значение в строке, дисперсия не будет работать, поэтому первый оператор «if» позаботится об этом.
df<-as.data.frame(matrix(c(1, 1, 1, NA, NA, NA, 2, 2, NA, NA, NA, NA, 3, 2, 1, 2, NA, NA, 4, 2, NA, 2, NA, NA, 5, 1, NA, NA, NA, NA),ncol=5, byrow = T))
colnames(df)<- c("A","B","C","D","F")
df
for (i in 1:nrow(df)){
if (length(as.numeric(df[i,1:5])[!is.na(as.numeric(df[i,1:5]))])==1){df[i,"col3"]<-as.numeric(df[i,1:5])[!is.na(as.numeric(df[i,1:5]))]}<br>
else if (var(as.numeric(df[i,1:5]),na.rm = T)==0){df[i,"col3"]<-mean(as.numeric(df[i,1:5]),na.rm = T)}
else if (var(as.numeric(df[i,1:5]),na.rm = T)!=0){df[i,"col3"]<-sum(unique(as.numeric(df[i,1:5])),na.rm = T)}
}
df
* Обновлено для работы с более чем двумя столбцами.