Я пытаюсь вычислить значения для строк в кадре данных. В принципе у меня есть кадр данных, который содержит 5 столбцов с 0 или 1 (наличие/отсутствие). Я хочу рандомизировать порядок этих значений по этим 5 столбцам, применить вычисления к этим столбцам, повторить это 1000 раз, затем рассчитать среднее значение для каждого расчёта за столбец и затем суммировать эти значения в одно значение для каждой строки.Лучший способ вычисления значений для строк кадра данных
Я пробовал делать это с лапкой и применять, но так или иначе не получил. Мне удалось сделать это с циклом for, но мне интересно, есть ли более короткий/лучший способ сделать это.
Это то, что я закончил с и работает по мере необходимости:
> df <- data.frame(t(replicate(10,sample(c(0,1),5,replace=TRUE))))
> df
X1 X2 X3 X4 X5
1 1 1 0 1 1
2 1 1 1 0 0
3 0 0 0 1 0
4 0 1 1 1 0
5 0 0 1 0 1
6 0 1 1 1 0
7 0 0 1 0 1
8 0 0 0 0 1
9 1 0 0 1 0
10 0 1 0 1 1
> for (i in 1:nrow(df)){
+ v<-sum(
+ rowMeans(
+ replicate(1000,{
+ sample(as.numeric(df[i,c("X1","X2","X3","X4","X5")]),5, replace=FALSE)*c(5,4,3,2,1)
+ }
+ )
+ )
+ )
+ df[i,c("tot")]<-v
+ }
> df
X1 X2 X3 X4 X5 tot
1 1 1 0 1 1 12.0184
2 1 1 1 0 0 8.9786
3 0 0 0 1 0 3.0138
4 0 1 1 1 0 9.0013
5 0 0 1 0 1 6.0196
6 0 1 1 1 0 9.0227
7 0 0 1 0 1 5.9837
8 0 0 0 0 1 3.0063
9 1 0 0 1 0 6.0069
10 0 1 0 1 1 9.0032
THis велик. Я не знаю, почему я не мог заставить его работать. Я предполагаю, что существует так много способов сделать что-то со всем применимым семейством функций, которые я прекратил видеть очевидным. Еще один вопрос, однако, есть способ сделать это с лапкой, потому что тогда я мог бы использовать multicore с mclapply. –
.. как 'lapply (as.data.frame (t (df)), function (x) {...' К сожалению, я никогда не получал многоядерные вещи для работы на моем ПК. – lukeA
Удивительно, что тоже работает. Теперь о многоядерном вызове :). –