Eu estou ficando um pouco confuso. Eu tenho dados como este em um quadro de dados
index times
1 1 56.60
2 1 150.75
3 1 204.41
4 2 44.71
5 2 98.03
6 2 112.20
e eu sei que os tempos indexados 1 são tendenciosos,enquanto que os tempos indexados de outra forma não são. Eu preciso criar uma cópia desse quadro de dados removendo o viés das amostras indexadas 1. Eu tenho tentado várias combinações de aplicar, por e os gostos. O mais próximo que eu cheguei foi com
by(lct, lct$index, function(x) { if(x$index == 1) x$times = x$times-50 else x$times = x$times } )
que retornou um objeto de classe by
, o que é inutilizável para mim. Eu preciso gravar os dados de volta para um arquivo csv no mesmo formato (índice, vezes) do arquivo original. Idéias?
Respostas:
0 para resposta № 1Algo como isso deve funcionar:
df$times[df$index ==1] <- df$times[df$times == 1] - 50
O truque aqui é pegar o subconjunto de df$times
que se adapta ao seu filtro e percebe que R também pode atribuir a um subconjunto.
Alternativamente, você pode usar ifelse
:
df$times = ifelse(df$index == 1, df$times - 50, df$times)
e usá-lo em dplyr
:
library(dplyr)
df = data.frame(index = sample(1:5, 100, replace = TRUE),
value = runif(100)) %>% arrange(index)
df %>% mutate(value = ifelse(index == 1, value - 50, value))
# index value
#1 1 -49.95827
#2 1 -49.98104
#3 1 -49.44015
#4 1 -49.37316
#5 1 -49.76286
#6 1 -49.22133
#etc
0 para resposta № 2
E se,
index <- c(1, 1, 1, 2, 2, 2)
times <- c(56.60, 150.75, 204.41, 44.71, 98.03, 112.20)
df <- data.frame(index, times)
df$times <- ifelse(df$index == 1, df$times - 50, df$times)
> df
#index times
#1 1 6.60
#2 1 100.75
#3 1 154.41
#4 2 44.71
#5 2 98.03
#6 2 112.20