Случайно вставить 1 в столбцы фрейма данных - PullRequest
0 голосов
/ 19 февраля 2019

Я хочу произвольно вставить 1 в столбцы фрейма данных, в которых в данный момент нет 1.Использование различных начальных чисел для каждой из переменных.

Ниже приведен код, который я написал до сих пор:

# create the data frame
df <- data.frame(A = c(0,0,0,0,0,0,0,0,0,0), 
                    B = c(0,0,0,0,0,0,0,0,0,0),
                    C = c(0,1,0,0,0,1,0,1,0,0), 
                    D = c(0,0,0,0,0,0,0,0,0,0),
                    E = c(0,1,0,1,0,0,0,0,0,0))

# get index of columns that have 1's in them 
one_index <- which(grepl(pattern = 1, df))

# function to randomly put 1's with seperate seeds
funcccs <- function(x){
  i = 0
  for (i in 1:ncol(x)) {
    set.seed(i + 1)
    x[sample(nrow(x),3)] <- 1
}}

# Apply the function to the columns that do not have 1 
funcccs(df[,-one_index])

Ниже приведено сообщение об ошибке, которое я получаю:

 Error in [<-.data.frame (*tmp*, sample(nrow(x), 3), value = 1) : 
  new columns would leave holes after existing columns 

На основе приведенного выше примера функция должна случайным образом вставить 3 значения 1 в переменные ' A ', ' B ' и ' D ', поскольку они3 переменные в настоящее время не имеют 1.

Любая помощь будет оценена.Спасибо

1 Ответ

0 голосов
/ 19 февраля 2019
df <- data.frame(A = c(0,0,0,0,0,0,0,0,0,0), 
                 B = c(0,0,0,0,0,0,0,0,0,0),
                 C = c(0,1,0,0,0,1,0,1,0,0), 
                 D = c(0,0,0,0,0,0,0,0,0,0),
                 E = c(0,1,0,1,0,0,0,0,0,0))
one_index <- which(grepl(pattern = 1, df))

funcccs <- function(x){
  i = 0
  for (i in 1:ncol(x)) {
    set.seed(i + 1)
    x[sample(nrow(x),3),i]= 1
  }
  return(x)
}
df[,-one_index]=funcccs(df[,-one_index])

Вы выбираете целую матрицу из столбца i.

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