Sorteio aleatório de valores e substituir por NA

Caros Listeiros, Estou tentando criar uma rotina para primeiro sortear 20% de linhas de um data frame com 10 variáveis e n=100, e com o resultado desse sorteio eu gostaria de sortear 10% dos valores independente da variável e substituir por NA. No entanto, estou com dois problemas para realizar isso: 1) O objeto sampl.data.10 criado que corresponde ao sorteio de 10% dos valores não corresponde ao objeto que originou o sorteio (sampl.n.20); e 2) Quando faço o sorteio de 10% dos valores e substituo por NA, perco a informação do identificador da amostra ou seja meu dados$ID, segue CRM abaixo, alguém poderia me dar um help? #Variáveis artificiais dados<-runif(1000) dados<-(dados*100)+c(1:500, 500:1) dados<-matrix(dados,nrow=50,ncol=10) dados<-as.data.frame(dados) names(dados)<-c("var1", "var2","var3","var4","var5","var6","var7","var8","var9","var10") dados$ID<-1:length(dados[,1]) dados<-as.data.frame(dados) #Pacote require(dplyr) ## Seleciono 20% das linhas do objeto dados sampl.n.20<-sample_frac(dados, 0.2) sampl.n.20 ##Seleciono 10% de valores independente da variável n.data<-0.1*(length(sampl.20[,1])*length(sampl.20[1,])) sampl.data.10<-matrix(sample(c(NA, sampl.20[,1]),length(sampl.20[,1])*length(sampl.20[1,]), replace = TRUE), n.data) sampl.data.10 Obrigado, -- ====================================================================== Alexandre dos Santos Proteção Florestal IFMT - Instituto Federal de Educação, Ciência e Tecnologia de Mato Grosso Campus Cáceres Caixa Postal 244 Avenida dos Ramires, s/n Bairro: Distrito Industrial Cáceres - MT CEP: 78.200-000 Fone: (+55) 65 8132-8112 (TIM) (+55) 65 9686-6970 (VIVO) e-mails:alexandresantosbr@yahoo.com.br alexandre.santos@cas.ifmt.edu.br Lattes: http://lattes.cnpq.br/1360403201088680 ======================================================================

Alexandre, se me permite, acho que tenho uma solução mais simples, sem usar o pacode dplyr e sem transformar o objeto de *matrix* para *data.frame.* Segue abaixo: # Definir o número de linhas e colunas da base original n <- 100 nCols <- 10 # Construir a base original dados <- matrix(runif(n * nCols), nrow = n) dados <- cbind(1:nrow(dados), dados) nomeVars <- c("var1", "var2","var3","var4","var5","var6","var7","var8","var9","var10") attributes(dados)$dimnames <- list(1:nrow(dados), c("ID", nomeVars)) head(dados) # Sorteio de 20% das linhas nLinhas <- n * 0.2 amostra20 <- sample(1:nrow(dados), size = nLinhas, replace = F) amostra20 <- amostra20[order(amostra20)] dados20 <- dados[amostra20, ] # Sorteio de 10% dos valores da subamostra nValores <- (nLinhas * nCols) * 0.1 amostra10 <- sample(1:(nLinhas * nCols), size = nValores, replace = F) amostra10 <- amostra10[order(amostra10)] # substituir os valores por NA dados20[, nomeVars][amostra10] <- NA dados20 Abraços, Paulo Em 7 de outubro de 2015 18:48, ASANTOS <alexandresantosbr@yahoo.com.br> escreveu:
Caros Listeiros,
Estou tentando criar uma rotina para primeiro sortear 20% de linhas de um data frame com 10 variáveis e n=100, e com o resultado desse sorteio eu gostaria de sortear 10% dos valores independente da variável e substituir por NA. No entanto, estou com dois problemas para realizar isso: 1) O objeto sampl.data.10 criado que corresponde ao sorteio de 10% dos valores não corresponde ao objeto que originou o sorteio (sampl.n.20); e 2) Quando faço o sorteio de 10% dos valores e substituo por NA, perco a informação do identificador da amostra ou seja meu dados$ID, segue CRM abaixo, alguém poderia me dar um help?
#Variáveis artificiais dados<-runif(1000) dados<-(dados*100)+c(1:500, 500:1) dados<-matrix(dados,nrow=50,ncol=10) dados<-as.data.frame(dados) names(dados)<-c("var1", "var2","var3","var4","var5","var6","var7","var8","var9","var10") dados$ID<-1:length(dados[,1]) dados<-as.data.frame(dados)
#Pacote require(dplyr)
## Seleciono 20% das linhas do objeto dados sampl.n.20<-sample_frac(dados, 0.2) sampl.n.20
##Seleciono 10% de valores independente da variável n.data<-0.1*(length(sampl.20[,1])*length(sampl.20[1,])) sampl.data.10<-matrix(sample(c(NA, sampl.20[,1]),length(sampl.20[,1])*length(sampl.20[1,]), replace = TRUE), n.data) sampl.data.10
Obrigado,
-- ====================================================================== Alexandre dos Santos Proteção Florestal IFMT - Instituto Federal de Educação, Ciência e Tecnologia de Mato Grosso Campus Cáceres Caixa Postal 244 Avenida dos Ramires, s/n Bairro: Distrito Industrial Cáceres - MT CEP: 78.200-000 Fone: (+55) 65 8132-8112 (TIM) (+55) 65 9686-6970 (VIVO) e-mails:alexandresantosbr@yahoo.com.br alexandre.santos@cas.ifmt.edu.br Lattes: http://lattes.cnpq.br/1360403201088680 ======================================================================
_______________________________________________ R-br mailing list R-br@listas.c3sl.ufpr.br https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e fornea cdigo mnimo reproduzvel.

Muito obrigado Paulo, Problema resolvido, o código ficou muito mais limpo e eficiente, Abraços, -- ====================================================================== Alexandre dos Santos Proteção Florestal IFMT - Instituto Federal de Educação, Ciência e Tecnologia de Mato Grosso Campus Cáceres Caixa Postal 244 Avenida dos Ramires, s/n Bairro: Distrito Industrial Cáceres - MT CEP: 78.200-000 Fone: (+55) 65 8132-8112 (TIM) (+55) 65 9686-6970 (VIVO) e-mails:alexandresantosbr@yahoo.com.br alexandre.santos@cas.ifmt.edu.br Lattes: http://lattes.cnpq.br/1360403201088680 ====================================================================== Em 07/10/2015 20:43, Paulo Nogueira Starzynski escreveu:
# Definir o número de linhas e colunas da base original n <- 100 nCols <- 10
# Construir a base original dados <- matrix(runif(n * nCols), nrow = n) dados <- cbind(1:nrow(dados), dados) nomeVars <- c("var1", "var2","var3","var4","var5","var6","var7","var8","var9","var10") attributes(dados)$dimnames <- list(1:nrow(dados), c("ID", nomeVars)) head(dados)
# Sorteio de 20% das linhas nLinhas <- n * 0.2 amostra20 <- sample(1:nrow(dados), size = nLinhas, replace = F) amostra20 <- amostra20[order(amostra20)] dados20 <- dados[amostra20, ]
# Sorteio de 10% dos valores da subamostra nValores <- (nLinhas * nCols) * 0.1 amostra10 <- sample(1:(nLinhas * nCols), size = nValores, replace = F) amostra10 <- amostra10[order(amostra10)]
# substituir os valores por NA dados20[, nomeVars][amostra10] <- NA dados20
participantes (2)
-
ASANTOS
-
Paulo Nogueira Starzynski