Eu tenho uma coluna de números em um arquivo csv e quero quebrar a coluna em intervalos regulares e transpô-los em várias linhas. Por exemplo:
Arquivo de entrada fictício:
10
25
09
04
14
100
01
10
100
04
04
01
04
Saída esperada (quebrando em intervalos regulares de 3):
10 25 09
04 14 100
01 10 100
04 04 01
04
Estou tentando fazer isso em R usando o for
loop, mas não consegui. Não estou obtendo a saída desejada, mas também há mais de 10 milhões de pontos como esses em uma única coluna. Portanto, não tenho certeza se o uso de loop é uma maneira eficiente. Eu pesquisei no Google e vi outras consultas no stackexchange como string dividida em intervalos regulares e como dividir uma string em substrings de um determinado comprimento? . Mas não resolveu meu problema.
No entanto, qualquer ajuda com isso é apreciada.
Aqui está uma tidyverse
forma dinâmica . Deve funcionar para qualquer valor de quebra.
set.seed(1)
df <- data_frame(x = sample(20, 10))
breaks <- 3
df %>%
mutate(
id = rep(paste0("col", 1:breaks), length.out = nrow(.)),
rn = ave(x, id, FUN = seq_along)
) %>%
spread(id, x) %>%
select(-rn)
# A tibble: 4 x 3
col1 col2 col3
<int> <int> <int>
1 6 8 11
2 16 4 14
3 15 9 19
4 1 NA NA
# another example with breaks at 6
breaks <- 6
df %>%
mutate(
id = rep(paste0("col", 1:breaks), length.out = nrow(.)),
rn = ave(x, id, FUN = seq_along)
) %>%
spread(id, x) %>%
select(-rn)
# A tibble: 2 x 6
col1 col2 col3 col4 col5 col6
<int> <int> <int> <int> <int> <int>
1 6 8 11 16 4 14
2 15 9 19 1 NA NA
Este artigo é coletado da Internet.
Se houver alguma infração, entre em [email protected] Delete.
deixe-me dizer algumas palavras