Создание новой переменной путем суммирования столбцов фрейма данных с использованием цикла for - PullRequest
0 голосов
/ 28 апреля 2019

Во-первых, я хочу смоделировать использование 20 наборов данных для цикла. Как только эти наборы данных сгенерированы, я хочу добавить новую переменную (столбец) к этим наборам данных на каждой итерации. Новая переменная является суммой всех столбцов каждого набора данных.

library(bindata)
set.seed(485)
cor.mat = diag(1, nrow = 3)
for (i in 1:nrow(cor.mat)) {
  for (j in 1:ncol(cor.mat)) {
    if (i > j) cor.mat[i, j] = runif(1, 0.2, 0.7)
    cor.mat[j, i] = cor.mat[i, j]
  }
}

N=20
mydata = list()
var = list()
mydata.new = list()
for(i in 1:N){
    mydata[[i]] = rmvbin(n=10,margprob=rep(0.4,3),bincorr = cor.mat)
    var[[i]] = mydata[,1][i]+mydata[,2][i]+mydata[,3][i] # I need your help here
    mydata.new[[i]] = cbind(mydata,var) # Again I need your help here
}

Я ожидаю, что 20 наборов данных mydata.new будут похожи на следующие.

v1 v2 v3 var
0  1  0   1
1  0  0   1
1  1  1   3
0  0  0   0
1  0  1   2

Заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 28 апреля 2019

Дает ли это желаемый результат?

# create some dummy-data for test
mydata = replicate(20, list(matrix(runif(9, 1, 10), ncol = 3)))

    class(mydata)
    length(mydata)

    # to get rowsums for each element of the list we can use lapply in combination with rowsums
    # and use cbind to attach it to the current list-object.
    mydata.new = lapply(mydata, function(f) cbind(f, rowSums(f)))

    # check results
    mydata.new[1]
    rowSums(mydata[[1]])
0 голосов
/ 28 апреля 2019

Если я правильно понимаю, вы хотите это:

for(i in 1:N){
  tmp = rmvbin(n=10,margprob=rep(0.4,3),bincorr = cor.mat)
  mydata[[i]] <- cbind(tmp, rowSums(tmp))
}

> mydata
[[1]]
      [,1] [,2] [,3] [,4]
 [1,]    0    0    0    0
 [2,]    0    1    0    1
 [3,]    0    1    0    1
 [4,]    0    0    0    0
 [5,]    0    0    1    1
 [6,]    1    1    1    3
 [7,]    0    0    0    0
 [8,]    1    1    1    3
 [9,]    0    1    1    2
[10,]    0    0    0    0
...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...