Digamos que tenho dados como:
> data[295:300,]
Date sulfate nitrate ID
295 2003-10-22 NA NA 1
296 2003-10-23 NA NA 1
297 2003-10-24 3.47 0.363 1
298 2003-10-25 NA NA 1
299 2003-10-26 NA NA 1
300 2003-10-27 NA NA 1
Agora eu gostaria de adicionar todos os nitrate
valores em uma nova lista / vetor. Estou usando o seguinte código:
i <- 1
my_list <- c()
for(val in data)
{
my_list[i] <- val
i <- i + 1
}
Mas é o que acontece:
Warning message:
In x[i] <- val :
number of items to replace is not a multiple of replacement length
> i
[1] 2
> x
[1] NA
Onde eu estou errando? Os dados fazem parte de um curso de Programação do Coursera R. Posso garantir que esta não é uma tarefa / teste. Tenho tentado entender qual é a melhor maneira de anexar elementos em uma lista com um loop. Não avancei para o curso lapply
ou sapply
parte dele, portanto, estou pensando em soluções alternativas.
Desde já, obrigado.
Se for uma pergunta duplicada, direcione-me a ela.
Como mencionamos nos comentários, você não está percorrendo as linhas de seu quadro de dados, mas as colunas (às vezes também variáveis). Portanto, faça um loop data$nitrate
.
i <- 1
my_list <- c()
for(val in data$nitrate)
{
my_list[i] <- val
i <- i + 1
}
Agora, em vez de fazer um loop sobre seus valores, a melhor maneira é usar que você deseja que o novo vetor e os dados antigos tenham o mesmo índice, então faça um loop sobre o índice i
. Como você diz a R quantos índices existem? Aqui você tem várias opções de novo: 1:nrow(data)
, 1:length(data$nitrate)
e várias outras maneiras. A seguir, forneci alguns exemplos de como extrair do quadro de dados.
my_vector <- c()
for(i in 1:nrow(data)){
my_vector[i] <- data$nitrate[i] ## Version 1 of extracting from data.frame
my_vector[i] <- data[i,"nitrate"] ## Version 2: [row,column name]
my_vector[i] <- data[i,3] ## Version 3: [row,column number]
}
Minha sugestão: em vez de chamar a coleção de lista, chame-a de vetor, pois é isso que ela é. Vetores e listas se comportam de maneira um pouco diferente em R.
É claro que, na realidade, você não deseja obter os dados um por um. Uma maneira muito mais eficiente de retirar seus dados é
my_vector2 <- data$nitrate
Este artigo é coletado da Internet.
Se houver alguma infração, entre em [email protected] Delete.
deixe-me dizer algumas palavras