2012-02-14 3 views
2

У меня есть матрица m нулей и кадр данных df, содержащий записи, которые я хочу вставить в m.R: избегая циклов при вставке записей в матрицу

# fix seed ------------------------------------------- 
set.seed(0)  

# create m, matrix of zeros -------------------------- 
rnames <- seq(1, 100, 1) 
m <- matrix(0, length(rnames), length(letters), 
     dimnames=list(rnames, letters)) 

# create df of random records ------------------------ 
r <- sample(rnames, 10, replace=TRUE) 
c <- sample(letters, 10, replace=TRUE) 
q <- runif(10, -10, 10) 
df <- data.frame(r, c, q) 

# want to insert df$q at r,c in m -------------------- 

Могу ли я сделать это, не прибегая к петле? Какой самый чистый подход?

+0

Чтобы сделать это воспроизводимым, вы должны установить начальное значение в любом месте перед первым «образцом», например. 'Set.seed (0)'. – Iterator

+0

@iterator хорошая идея - отредактирует – kfmfe04

ответ

5

Передайте матрицу указателей в m.

index <- cbind(
    row = df$r, 
    col = match(df$c, colnames(m))  
) 

m[index] <- df$q 
+0

отлично работает! tyvm – kfmfe04

+0

(+1) Это путь. (Я должен был проверить свое решение перед публикацией :) – chl

Смежные вопросы