Используйте фрейм данных в качестве таблицы соответствия - PullRequest
0 голосов
/ 24 октября 2018

У меня есть база данных, которая выглядит следующим образом:

> database
     [,1] [,2] [,3] [,4]
[1,]    1    2    1    1
[2,]    2    2    3    4
[3,]    4    4    4    1

И таблица соответствий, которая представляет собой фрейм данных:

> corresp
  number  name
1      1 name1
2      2 name2
3      3 name3
4      4 name4

Как заменить числа соответствующими именами вмоя база данных без использования цикла?

(для репликации:)

database <- rbind(c(1, 2, 1, 1), 
                  c(2, 2, 3, 4),
                  c(4, 4, 4, 1))
corresp <- data.frame(number = c(1, 2, 3, 4),
                      name = c("name1","name2","name3","name4"))

Ответы [ 3 ]

0 голосов
/ 24 октября 2018

Вы можете использовать match вместе с apply, чтобы заменить все столбцы database на их имена.

database <- data.frame(database, stringsAsFactors = F)
apply(database, 2, function(x) corresp$name[match(x,corresp$number)])

    X1      X2      X3      X4     
[1,] "name1" "name2" "name1" "name1"
[2,] "name2" "name2" "name3" "name4"
[3,] "name4" "name4" "name4" "name1"
0 голосов
/ 24 октября 2018

Без петель, даже не apply:

database[] <- as.character(corresp$name)[match(database, corresp$number)]

database
#     [,1]    [,2]    [,3]    [,4]   
#[1,] "name1" "name2" "name1" "name1"
#[2,] "name2" "name2" "name3" "name4"
#[3,] "name4" "name4" "name4" "name1"
0 голосов
/ 24 октября 2018

Использование apply с match

apply(database,2,function(x) corresp$V2[match(x,corresp$V1)])
     [,1]    [,2]    [,3]    [,4]   
[1,] "name1" "name2" "name1" "name1"
[2,] "name2" "name2" "name3" "name4"
[3,] "name4" "name4" "name4" "name1"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...