Объедините вектор и data.frame, совпадающие со значениями столбца и векторными значениями - PullRequest
6 голосов
/ 21 февраля 2012

у меня

vetor <- c(1,2,3)
data <- data.frame(id=c('a', 'b', 'a', 'c', 'a'))

Мне нужен вывод data.frame, который сопоставляет каждое значение вектора с определенным идентификатором, в результате:

  id vector1
1  a       1
2  b       2
3  a       1
4  c       3
5  a       1

Ответы [ 3 ]

4 голосов
/ 21 февраля 2012

Вот два подхода, которые я часто использую для подобных ситуаций:

vetor <- c(1,2,3)
key <- data.frame(vetor=vetor, mat=c('a', 'b', 'c'))
data <- data.frame(id=c('a', 'b', 'a', 'c', 'a'))

data$vector1 <- key[match(data$id, key$mat), 'vetor']
#or with merge
merge(data, key, by.x = "id", by.y = "mat")
0 голосов
/ 21 февраля 2012

Вот ответ, который я нашел, следуя совету "математические.coffee":

vector1 <- c('b','a','a','c','a','a')  # 3 elements to be labeled: a, b and c
labels <- factor(vector1, labels= c('char a', 'char b', 'char c') )
data.frame(vector1, labels)

Единственное, что нам нужно заметить, это то, что в функции factor(vector1,...) будет упорядочено vector1 иэтикетки должны правильно следовать этому порядку.

0 голосов
/ 21 февраля 2012

То есть вам нужно одно уникальное целое число для каждого отдельного столбца id?

Это называется фактор в R, а столбец id равен единице.

Чтобы преобразовать в числовое представление, используйте as.numeric:

data <- data.frame(id=c('a', 'b', 'a', 'c', 'a'))
data$vector1 <- as.numeric(data$id)

Это работает, потому что data$id это не столбец строк, а столбец множителей .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...