在数据框变量中查找唯一字符串

find unique strings in data frame variables

我有一个包含多个字符变量的数据框,我想在每一行中找到唯一的字符串。每行的几列中只有一个特定的字符串被 NA 包围。 IE。数据框 "df":

  Col1 Col2 Col3
1 ABC  ABC  NA
2  NA  DEF  DEF
3 GHI  NA   NA
4 JKL  JKL  JKL

作为我想要的输出

ABC
DEF
GHI
JKL

最好为每一行设置某种应用函数。我尝试了

的几种变体
apply(df,1, function(x) unique(x))

但这并不成功。我认为有一个很简单的方法,如果你知道正确的功能?我该怎么做?

我们可以使用is.na删除NA元素

unname(apply(df, 1, FUN = function(x) unique(x[!is.na(x)])))
#[1] "ABC" "DEF" "GHI" "JKL"

如果每行有多个 unique 个元素,它将 return 作为 list(取决于每一行的元素数量是否不同)。在那种情况下,我们可以 paste 它们一起创建一个字符串

unname(apply(df, 1, FUN = function(x) toString(unique(x[!is.na(x)])))) 

另一个选项是 pmax 如果每行只有一个唯一元素

 do.call(pmax, c(df, list(na.rm=TRUE)))
 #[1] "ABC" "DEF" "GHI" "JKL"

另一种选择

levels(unlist(df))