Копируй свои данные:
structure(list(val1 = c(1.1, 5.7, 3.1, 9.6), val2 = c(2L, 5L,
3L, 1L), val3 = c(1.1, 5.6, 3.2, 9.5), val4 = c(2.1, 4.9, 2.9,
1), val5 = c(4.2, 9.9, 5.9, 2)), .Names = c("val1", "val2", "val3",
"val4", "val5"), class = "data.frame", row.names = c("1", "2",
"3", "4"))
x
val1 val2 val3 val4 val5
1 1.1 2 1.1 2.1 4.2
2 5.7 5 5.6 4.9 9.9
3 3.1 3 3.2 2.9 5.9
4 9.6 1 9.5 1.0 2.0
Создать функцию. Механизм заключается в обтекании базовой функции R duplicated
, в которой есть метод для массивов, который также обрабатывает столбцы, в отличие от метода для data.frames, который обрабатывает только строки. Кроме того, я взял ваше слово и закруглил каждый столбец, но вы можете указать количество цифр в качестве параметра.
not_duplicated <- function(x, round_digits, margin=2){
x2 <- apply(x, margin, round, round_digits)
colnames(x)[!duplicated(x2, MARGIN=margin)]
}
Результаты соответствуют указанным вами:
x <- as.matrix(x)
not_duplicated(x, 0)
[1] "val1" "val2" "val5"