R make.unique, начиная с 1 - PullRequest
       12

R make.unique, начиная с 1

0 голосов
/ 05 октября 2011

У меня есть фрейм данных со столбцами, которые находятся в группах по 4, например:

a b c d a b c d a b c d a b c d...

Затем я использую функцию rep для создания тегов для столбцов:

rep(c("a", "b", "c", "d"), len=ncol)

Наконец, я использую функцию make.unique для создания тегов:

a b c d a1 b1 c1 d1 a2 b2 c2 d2 a3 b3 c3 d3...

Однако я бы хотел получить:

a1 b1 c1 d1 a2 b2 c2 d2 a3 b3 c3 d3 a4 b4 c4 d4...

Есть ли простой способ сделать это? В документации make.unique не упоминаются никакие параметры для получения этого поведения.

Ответы [ 3 ]

1 голос
/ 05 октября 2011
n <- 4
ncol <- 16
paste(letters[seq(n)], rep(seq(ncol/n), each = n, len = ncol), sep = "")
1 голос
/ 05 октября 2011

Не назову это довольно, но это делает работу:

> ncol <- 10
> apply(expand.grid(c("a","b","c","d"),1:((ncol+3)/4)), 1,
+   function(x)paste(x,collapse=""))[1:ncol]
 [1] "a1" "b1" "c1" "d1" "a2" "b2" "c2" "d2" "a3" "b3"

где ncol - количество генерируемых тегов.

0 голосов
/ 15 декабря 2018
make.unique.2 = function(x, sep='.'){
    ave(x, x, FUN=function(a){if(length(a) > 1){paste(a, 1:length(a), sep=sep)} else {a}})
}

Тестирование по вашему примеру:

> u = rep(c("a", "b", "c", "d"), 4)
> make.unique.2(u)
  [1] "a.1" "b.1" "c.1" "d.1" "a.2" "b.2" "c.2" "d.2" "a.3" "b.3" "c.3" "d.3"
 [13] "a.4" "b.4" "c.4" "d.4"

Если элемент не дублируется, он остается один:

> u = c('a', 'a', 'b', 'c', 'c', 'c', 'd')
> make.unique.2(u)
[1] "a.1" "a.2" "b"   "c.1" "c.2" "c.3" "d"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...