Использование цикла для ссылки и вставки значения, находящегося в матрице / кадре данных - PullRequest
1 голос
/ 11 октября 2019

Здравствуйте. Я новичок в R и надеялся найти способ использовать цикл для определения значений в матрице или фрейме данных на основе наблюдений в двух векторах и вставки результата в другой вектор.

Допустим, у вас есть матрица А, которая представляет прогнозируемый вес мужчины (фунты), основанный на росте (векторы столбца) от 48 "-n" и возрасте (вектор строки) от 20-й.

Далее у вас есть матрица B, в которой есть сотни наблюдений за именем, ростом, мужчиной (вектор h) и возрастом (вектор a).

Цель состоит в том, чтобы вывести прогноз веса для каждогомужчина в векторе, который мы могли бы прикрепить к матрице B.

Мои навыки R ограничены, но код, который идентифицировал бы предсказанный вес, основанный на наблюдении за ростом (h) и возрастом (a), был бы похож на что-то вродеэто. Однако матрицы A и B будут импортированы из файла Excel (не уверен, какой это будет эффект).

A<-rbind(c(100,105,107, .,  .,...n),

         c(105,110,112, .,  .,...n),

         c( . , . , . , . , .,...n),

         c( . , . , . , . , .,...n),

         c( .   .   .   .  . ,...n),

         c( .   .   .   .  . ,...n),

         c( j   .   .   .  . ,...n))

colnames(A)<-c(48,50,52,54,56,...n)

rownames(A)<-c(20,22,24,26,28,...n)

B<-rbind(c(Paul,48,20),

         c(Jim, 54,24),

         c(Bob, 58,28))

colnames(B)<- c(Name, h, a)

{loop code
predicted_weight <- c(A[B$h,B$a]) 

}

Любая помощь будет полезна, чтобы избавить меня от ручной идентификации соответствующих ячеек 900 раз.

1 Ответ

0 голосов
/ 11 октября 2019

Одним из предложений является использование фреймов данных над матрицами для учета нескольких типов данных и именования строк и столбцов.
См. Комментарии в коде для пояснения.

#Create dummy data 
#reference/lookup matrix
A<-matrix(1:25, nrow=5)
#convert to data frame for easier handling
A<-as.data.frame(A, stringsAsFactors =FALSE)
colnames(A)<-c(48,50,52,54,56)
rownames(A)<-c(20,22,24,26,28)

#target matrix
B<-rbind(c("Paul",48,20),
         c("Jim", 54,24),
         c("Bob", 56,28))

#convert to data frame for easier handling
B<-as.data.frame(B, stringsAsFactors =FALSE)
colnames(B)<- c("Name", "h", "a")

#retrieve the row and column value
answer<-sapply(1:nrow(B), function(i){A[B[i,3],B[i,2]]})

data.frame (имя = B [, 1], ответ)
имя ответа
Пол 1
Джим 18
Боб 25

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