Предполагая, что ваши "na" на самом деле NA
s, и у вас будет одинаковое количество NA
s в каждой строке, которую вы хотите удалить, вы можете сделать
data.frame(t(apply(df, 1, function(x) x[!is.na(x)])))
# X1 X2
#1 x z
#2 x t
#3 z x
#4 y s
Если у вас есть строка"na" тогда
data.frame(t(apply(df, 1, function(x) x[x != "na"])))
должно работать.