R передать значение столбца в качестве значения для выбора столбца из массива - PullRequest
2 голосов
/ 16 июня 2011

Я пытаюсь передать значение существующего атрибута R (столбца) как значение, необходимое для идентификации конкретного столбца в массиве, который я хочу выбрать.Ранее я писал цикл For с оператором IF, но он работает очень медленно.

Каждый человек будет иметь членство в группе (1, 2 или 3).У меня есть вероятность их членства в группе в данных $ prob1, данных $ prob2 и данных $ prob3.

Я хочу передать значение данных $ Group следующим образом:

data $ ClstrAffinity = data $ Prob [, data $ Group]

, но оно не работает.Есть идеи?

Код медленного выполнения приведен ниже.

Спасибо.

data$ProbOne = data$Prob[ , 1]
data$ProbTwo = data$Prob[ ,2]
data$ProbThree = data$Prob[ ,3]
data$GroupMembershipNumeric = as.numeric(data$Group)

data[data$Group == 1]

for (a in c(1:nrow(data))) {
  groupMembership = data$GroupMembershipNumeric[a]
  if (groupMembership == 1) {
    data$ClstrAffinity[a] = data$ProbOne[a]
  }
  if (groupMembership == 2) {
    data$ClstrAffinity[a] = data$ProbTwo[a]
  }
  if (groupMembership == 3) {
    data$ClstrAffinity[a] = data$ProbThree[a]
  }
  print(groupMembership)
  groupMembership = NULL
}

Ответы [ 2 ]

3 голосов
/ 16 июня 2011

Матричное индексирование - это то, что вам нужно.Я сгенерирую некоторые примеры данных

set.seed(5)
Prob <- matrix(sample(0:10, 15, replace=TRUE)/10, ncol=3)
Group <- sample(1:3,5,replace=TRUE)

Тогда ваш желаемый результат просто

ProbFinal <- Prob[cbind(1:5,Group)]
0 голосов
/ 16 июня 2011

Вы можете использовать which:

data$ProbFinal = "NA"

data$ProbOne = data$Prob[ ,1]
data$ProbTwo = data$Prob[ ,2]
data$ProbThree = data$Prob[ ,3]

data$ProbFinal[which(data$Group == 1)] = data$ProbOne[which(data$Group  == 1)]
data$ProbFinal[which(data$Group == 2)] = data$ProbTwo[which(data$Group == 2)]
data$ProbFinal[which(data$Group == 3)] = data$ProbThree[which(data$Group == 3)]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...