R переместите столбцы в строки других столбцов

#r #row #columnsorting

Вопрос:

Я преобразую грязный лист Excel в полезные данные. Базовая структура представляет собой повторяющийся блок переменных с аналогичными элементами в строках. Я хочу переместить столбцы так, чтобы они стали строками первого блока столбцов.

Трудно описать, так что вот mwe.

 d1 = structure(list(...1 = c("p", "w", "s", NA, "A Ex", NA, "Pres", 
"Time", "HR"), ...2 = c("1", "1", "1", NA, "Walk", NA, NA, NA, 
NA), ...3 = c(NA, NA, NA, NA, NA, NA, "Done", "Time", "HR"), 
    ...4 = c(NA, NA, NA, NA, NA, NA, NA, NA, NA), ...5 = c("p", 
    "w", "s", NA, "A Ex", NA, "Pres", "Time", "HR"), ...6 = c("1", 
    "1", "2", NA, "Walk", NA, NA, NA, NA), ...7 = c(NA, NA, NA, 
    NA, NA, NA, "Done", "Time", "HR"), ...8 = c(NA, NA, NA, NA, 
    NA, NA, NA, NA, NA), ...9 = c("p", "w", "s", NA, "A Ex", 
    NA, "Pres", "Time", "HR"), ...10 = c("1", "1", "3", NA, "Walk", 
    NA, NA, NA, NA), ...11 = c(NA, NA, NA, NA, NA, NA, "Done", 
    "Time", "HR"), ...12 = c(NA, NA, NA, NA, NA, NA, NA, NA, 
    NA)), row.names = c(NA, -9L), class = c("tbl_df", "tbl", 
"data.frame"))
 

Я хочу переместить столбцы 5:8 и 6:12, чтобы они стали дополнительными строками 1:4, чтобы результат был:

 df2 = structure(list(...1 = c("p", "w", "s", NA, "A Ex", NA, "Pres", 
"Time", "HR", "p", "w", "s", NA, "A Ex", NA, "Pres", "Time", 
"HR", "p", "w", "s", NA, "A Ex", NA, "Pres", "Time", "HR"), ...2 = c("1", 
"1", "1", NA, "Walk", NA, NA, NA, NA, "1", "1", "2", NA, "Walk", 
NA, NA, NA, NA, "1", "1", "3", NA, "Walk", NA, NA, NA, NA), ...3 = c(NA, 
NA, NA, NA, NA, NA, "Done", "Time", "HR", NA, NA, NA, NA, NA, 
NA, "Done", "Time", "HR", NA, NA, NA, NA, NA, NA, "Done", "Time", 
"HR"), ...4 = c(NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA)), row.names = c(NA, 
-27L), class = c("tbl_df", "tbl", "data.frame"))
 

Ответ №1:

основание R

Основная предпосылка состоит в том, чтобы разбиться на группы по 4 столбца:

 splitframes <- split.default(d1, (seq_along(d1)-1) %/% 4)
splitframes
# 
 #r #row #columnsorting



Вопрос:

Я преобразую грязный лист Excel в полезные данные. Базовая структура представляет собой повторяющийся блок переменных с аналогичными элементами в строках. Я хочу переместить столбцы так, чтобы они стали строками первого блока столбцов. Трудно описать, так что вот mwe.
 d1 = structure(list(...1 = c("p", "w", "s", NA, "A Ex", NA, "Pres", 
"Time", "HR"), ...2 = c("1", "1", "1", NA, "Walk", NA, NA, NA, 
NA), ...3 = c(NA, NA, NA, NA, NA, NA, "Done", "Time", "HR"), 
    ...4 = c(NA, NA, NA, NA, NA, NA, NA, NA, NA), ...5 = c("p", 
    "w", "s", NA, "A Ex", NA, "Pres", "Time", "HR"), ...6 = c("1", 
    "1", "2", NA, "Walk", NA, NA, NA, NA), ...7 = c(NA, NA, NA, 
    NA, NA, NA, "Done", "Time", "HR"), ...8 = c(NA, NA, NA, NA, 
    NA, NA, NA, NA, NA), ...9 = c("p", "w", "s", NA, "A Ex", 
    NA, "Pres", "Time", "HR"), ...10 = c("1", "1", "3", NA, "Walk", 
    NA, NA, NA, NA), ...11 = c(NA, NA, NA, NA, NA, NA, "Done", 
    "Time", "HR"), ...12 = c(NA, NA, NA, NA, NA, NA, NA, NA, 
    NA)), row.names = c(NA, -9L), class = c("tbl_df", "tbl", 
"data.frame"))
 

Я хочу переместить столбцы 5:8 и 6:12, чтобы они стали дополнительными строками 1:4, чтобы результат был:

 df2 = structure(list(...1 = c("p", "w", "s", NA, "A Ex", NA, "Pres", 
"Time", "HR", "p", "w", "s", NA, "A Ex", NA, "Pres", "Time", 
"HR", "p", "w", "s", NA, "A Ex", NA, "Pres", "Time", "HR"), ...2 = c("1", 
"1", "1", NA, "Walk", NA, NA, NA, NA, "1", "1", "2", NA, "Walk", 
NA, NA, NA, NA, "1", "1", "3", NA, "Walk", NA, NA, NA, NA), ...3 = c(NA, 
NA, NA, NA, NA, NA, "Done", "Time", "HR", NA, NA, NA, NA, NA, 
NA, "Done", "Time", "HR", NA, NA, NA, NA, NA, NA, "Done", "Time", 
"HR"), ...4 = c(NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA)), row.names = c(NA, 
-27L), class = c("tbl_df", "tbl", "data.frame"))
 

Ответ №1:

основание R

Основная предпосылка состоит в том, чтобы разбиться на группы по 4 столбца:

0`
# # A tibble: 9 x 4
# ...1 ...2 ...3 ...4
# <chr> <chr> <chr> <lgl>
# 1 p 1 <NA> NA
# 2 w 1 <NA> NA
# 3 s 1 <NA> NA
# 4 <NA> <NA> <NA> NA
# 5 A Ex Walk <NA> NA
# 6 <NA> <NA> <NA> NA
# 7 Pres <NA> Done NA
# 8 Time <NA> Time NA
# 9 HR <NA> HR NA
#

#r #row #columnsorting

Вопрос:

Я преобразую грязный лист Excel в полезные данные. Базовая структура представляет собой повторяющийся блок переменных с аналогичными элементами в строках. Я хочу переместить столбцы так, чтобы они стали строками первого блока столбцов.

Трудно описать, так что вот mwe.

 d1 = structure(list(...1 = c("p", "w", "s", NA, "A Ex", NA, "Pres", 
"Time", "HR"), ...2 = c("1", "1", "1", NA, "Walk", NA, NA, NA, 
NA), ...3 = c(NA, NA, NA, NA, NA, NA, "Done", "Time", "HR"), 
    ...4 = c(NA, NA, NA, NA, NA, NA, NA, NA, NA), ...5 = c("p", 
    "w", "s", NA, "A Ex", NA, "Pres", "Time", "HR"), ...6 = c("1", 
    "1", "2", NA, "Walk", NA, NA, NA, NA), ...7 = c(NA, NA, NA, 
    NA, NA, NA, "Done", "Time", "HR"), ...8 = c(NA, NA, NA, NA, 
    NA, NA, NA, NA, NA), ...9 = c("p", "w", "s", NA, "A Ex", 
    NA, "Pres", "Time", "HR"), ...10 = c("1", "1", "3", NA, "Walk", 
    NA, NA, NA, NA), ...11 = c(NA, NA, NA, NA, NA, NA, "Done", 
    "Time", "HR"), ...12 = c(NA, NA, NA, NA, NA, NA, NA, NA, 
    NA)), row.names = c(NA, -9L), class = c("tbl_df", "tbl", 
"data.frame"))
 

Я хочу переместить столбцы 5:8 и 6:12, чтобы они стали дополнительными строками 1:4, чтобы результат был:

 df2 = structure(list(...1 = c("p", "w", "s", NA, "A Ex", NA, "Pres", 
"Time", "HR", "p", "w", "s", NA, "A Ex", NA, "Pres", "Time", 
"HR", "p", "w", "s", NA, "A Ex", NA, "Pres", "Time", "HR"), ...2 = c("1", 
"1", "1", NA, "Walk", NA, NA, NA, NA, "1", "1", "2", NA, "Walk", 
NA, NA, NA, NA, "1", "1", "3", NA, "Walk", NA, NA, NA, NA), ...3 = c(NA, 
NA, NA, NA, NA, NA, "Done", "Time", "HR", NA, NA, NA, NA, NA, 
NA, "Done", "Time", "HR", NA, NA, NA, NA, NA, NA, "Done", "Time", 
"HR"), ...4 = c(NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA)), row.names = c(NA, 
-27L), class = c("tbl_df", "tbl", "data.frame"))
 

Ответ №1:

основание R

Основная предпосылка состоит в том, чтобы разбиться на группы по 4 столбца:

1`
# # A tibble: 9 x 4
# ...1 ...2 ...3 ...4
# <chr> <chr> <chr> <lgl>
# 1 p 1 <NA> NA
# 2 w 1 <NA> NA

К сожалению, rbind.data.frame необходимо, чтобы все аргументы имели одинаковые имена,

 lapply(splitframes, names)
# 
 #r #row #columnsorting



Вопрос:

Я преобразую грязный лист Excel в полезные данные. Базовая структура представляет собой повторяющийся блок переменных с аналогичными элементами в строках. Я хочу переместить столбцы так, чтобы они стали строками первого блока столбцов. Трудно описать, так что вот mwe.
 d1 = structure(list(...1 = c("p", "w", "s", NA, "A Ex", NA, "Pres", 
"Time", "HR"), ...2 = c("1", "1", "1", NA, "Walk", NA, NA, NA, 
NA), ...3 = c(NA, NA, NA, NA, NA, NA, "Done", "Time", "HR"), 
    ...4 = c(NA, NA, NA, NA, NA, NA, NA, NA, NA), ...5 = c("p", 
    "w", "s", NA, "A Ex", NA, "Pres", "Time", "HR"), ...6 = c("1", 
    "1", "2", NA, "Walk", NA, NA, NA, NA), ...7 = c(NA, NA, NA, 
    NA, NA, NA, "Done", "Time", "HR"), ...8 = c(NA, NA, NA, NA, 
    NA, NA, NA, NA, NA), ...9 = c("p", "w", "s", NA, "A Ex", 
    NA, "Pres", "Time", "HR"), ...10 = c("1", "1", "3", NA, "Walk", 
    NA, NA, NA, NA), ...11 = c(NA, NA, NA, NA, NA, NA, "Done", 
    "Time", "HR"), ...12 = c(NA, NA, NA, NA, NA, NA, NA, NA, 
    NA)), row.names = c(NA, -9L), class = c("tbl_df", "tbl", 
"data.frame"))
 

Я хочу переместить столбцы 5:8 и 6:12, чтобы они стали дополнительными строками 1:4, чтобы результат был:

 df2 = structure(list(...1 = c("p", "w", "s", NA, "A Ex", NA, "Pres", 
"Time", "HR", "p", "w", "s", NA, "A Ex", NA, "Pres", "Time", 
"HR", "p", "w", "s", NA, "A Ex", NA, "Pres", "Time", "HR"), ...2 = c("1", 
"1", "1", NA, "Walk", NA, NA, NA, NA, "1", "1", "2", NA, "Walk", 
NA, NA, NA, NA, "1", "1", "3", NA, "Walk", NA, NA, NA, NA), ...3 = c(NA, 
NA, NA, NA, NA, NA, "Done", "Time", "HR", NA, NA, NA, NA, NA, 
NA, "Done", "Time", "HR", NA, NA, NA, NA, NA, NA, "Done", "Time", 
"HR"), ...4 = c(NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA)), row.names = c(NA, 
-27L), class = c("tbl_df", "tbl", "data.frame"))
 

Ответ №1:

основание R

Основная предпосылка состоит в том, чтобы разбиться на группы по 4 столбца:

 splitframes <- split.default(d1, (seq_along(d1)-1) %/% 4)
splitframes
# 
 #r #row #columnsorting



Вопрос:

Я преобразую грязный лист Excel в полезные данные. Базовая структура представляет собой повторяющийся блок переменных с аналогичными элементами в строках. Я хочу переместить столбцы так, чтобы они стали строками первого блока столбцов. Трудно описать, так что вот mwe.
 d1 = structure(list(...1 = c("p", "w", "s", NA, "A Ex", NA, "Pres", 
"Time", "HR"), ...2 = c("1", "1", "1", NA, "Walk", NA, NA, NA, 
NA), ...3 = c(NA, NA, NA, NA, NA, NA, "Done", "Time", "HR"), 
    ...4 = c(NA, NA, NA, NA, NA, NA, NA, NA, NA), ...5 = c("p", 
    "w", "s", NA, "A Ex", NA, "Pres", "Time", "HR"), ...6 = c("1", 
    "1", "2", NA, "Walk", NA, NA, NA, NA), ...7 = c(NA, NA, NA, 
    NA, NA, NA, "Done", "Time", "HR"), ...8 = c(NA, NA, NA, NA, 
    NA, NA, NA, NA, NA), ...9 = c("p", "w", "s", NA, "A Ex", 
    NA, "Pres", "Time", "HR"), ...10 = c("1", "1", "3", NA, "Walk", 
    NA, NA, NA, NA), ...11 = c(NA, NA, NA, NA, NA, NA, "Done", 
    "Time", "HR"), ...12 = c(NA, NA, NA, NA, NA, NA, NA, NA, 
    NA)), row.names = c(NA, -9L), class = c("tbl_df", "tbl", 
"data.frame"))
 

Я хочу переместить столбцы 5:8 и 6:12, чтобы они стали дополнительными строками 1:4, чтобы результат был:

 df2 = structure(list(...1 = c("p", "w", "s", NA, "A Ex", NA, "Pres", 
"Time", "HR", "p", "w", "s", NA, "A Ex", NA, "Pres", "Time", 
"HR", "p", "w", "s", NA, "A Ex", NA, "Pres", "Time", "HR"), ...2 = c("1", 
"1", "1", NA, "Walk", NA, NA, NA, NA, "1", "1", "2", NA, "Walk", 
NA, NA, NA, NA, "1", "1", "3", NA, "Walk", NA, NA, NA, NA), ...3 = c(NA, 
NA, NA, NA, NA, NA, "Done", "Time", "HR", NA, NA, NA, NA, NA, 
NA, "Done", "Time", "HR", NA, NA, NA, NA, NA, NA, "Done", "Time", 
"HR"), ...4 = c(NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA)), row.names = c(NA, 
-27L), class = c("tbl_df", "tbl", "data.frame"))
 

Ответ №1:

основание R

Основная предпосылка состоит в том, чтобы разбиться на группы по 4 столбца:

0`
# # A tibble: 9 x 4
# ...1 ...2 ...3 ...4
# <chr> <chr> <chr> <lgl>
# 1 p 1 <NA> NA
# 2 w 1 <NA> NA
# 3 s 1 <NA> NA
# 4 <NA> <NA> <NA> NA
# 5 A Ex Walk <NA> NA
# 6 <NA> <NA> <NA> NA
# 7 Pres <NA> Done NA
# 8 Time <NA> Time NA
# 9 HR <NA> HR NA
#

#r #row #columnsorting

Вопрос:

Я преобразую грязный лист Excel в полезные данные. Базовая структура представляет собой повторяющийся блок переменных с аналогичными элементами в строках. Я хочу переместить столбцы так, чтобы они стали строками первого блока столбцов.

Трудно описать, так что вот mwe.

 d1 = structure(list(...1 = c("p", "w", "s", NA, "A Ex", NA, "Pres", 
"Time", "HR"), ...2 = c("1", "1", "1", NA, "Walk", NA, NA, NA, 
NA), ...3 = c(NA, NA, NA, NA, NA, NA, "Done", "Time", "HR"), 
    ...4 = c(NA, NA, NA, NA, NA, NA, NA, NA, NA), ...5 = c("p", 
    "w", "s", NA, "A Ex", NA, "Pres", "Time", "HR"), ...6 = c("1", 
    "1", "2", NA, "Walk", NA, NA, NA, NA), ...7 = c(NA, NA, NA, 
    NA, NA, NA, "Done", "Time", "HR"), ...8 = c(NA, NA, NA, NA, 
    NA, NA, NA, NA, NA), ...9 = c("p", "w", "s", NA, "A Ex", 
    NA, "Pres", "Time", "HR"), ...10 = c("1", "1", "3", NA, "Walk", 
    NA, NA, NA, NA), ...11 = c(NA, NA, NA, NA, NA, NA, "Done", 
    "Time", "HR"), ...12 = c(NA, NA, NA, NA, NA, NA, NA, NA, 
    NA)), row.names = c(NA, -9L), class = c("tbl_df", "tbl", 
"data.frame"))
 

Я хочу переместить столбцы 5:8 и 6:12, чтобы они стали дополнительными строками 1:4, чтобы результат был:

 df2 = structure(list(...1 = c("p", "w", "s", NA, "A Ex", NA, "Pres", 
"Time", "HR", "p", "w", "s", NA, "A Ex", NA, "Pres", "Time", 
"HR", "p", "w", "s", NA, "A Ex", NA, "Pres", "Time", "HR"), ...2 = c("1", 
"1", "1", NA, "Walk", NA, NA, NA, NA, "1", "1", "2", NA, "Walk", 
NA, NA, NA, NA, "1", "1", "3", NA, "Walk", NA, NA, NA, NA), ...3 = c(NA, 
NA, NA, NA, NA, NA, "Done", "Time", "HR", NA, NA, NA, NA, NA, 
NA, "Done", "Time", "HR", NA, NA, NA, NA, NA, NA, "Done", "Time", 
"HR"), ...4 = c(NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA)), row.names = c(NA, 
-27L), class = c("tbl_df", "tbl", "data.frame"))
 

Ответ №1:

основание R

Основная предпосылка состоит в том, чтобы разбиться на группы по 4 столбца:

1`
# # A tibble: 9 x 4
# ...1 ...2 ...3 ...4
# <chr> <chr> <chr> <lgl>
# 1 p 1 <NA> NA
# 2 w 1 <NA> NA

К сожалению, rbind.data.frame необходимо, чтобы все аргументы имели одинаковые имена,

0`
# [1] "...1" "...2" "...3" "...4"
#

#r #row #columnsorting

Вопрос:

Я преобразую грязный лист Excel в полезные данные. Базовая структура представляет собой повторяющийся блок переменных с аналогичными элементами в строках. Я хочу переместить столбцы так, чтобы они стали строками первого блока столбцов.

Трудно описать, так что вот mwe.

 d1 = structure(list(...1 = c("p", "w", "s", NA, "A Ex", NA, "Pres", 
"Time", "HR"), ...2 = c("1", "1", "1", NA, "Walk", NA, NA, NA, 
NA), ...3 = c(NA, NA, NA, NA, NA, NA, "Done", "Time", "HR"), 
    ...4 = c(NA, NA, NA, NA, NA, NA, NA, NA, NA), ...5 = c("p", 
    "w", "s", NA, "A Ex", NA, "Pres", "Time", "HR"), ...6 = c("1", 
    "1", "2", NA, "Walk", NA, NA, NA, NA), ...7 = c(NA, NA, NA, 
    NA, NA, NA, "Done", "Time", "HR"), ...8 = c(NA, NA, NA, NA, 
    NA, NA, NA, NA, NA), ...9 = c("p", "w", "s", NA, "A Ex", 
    NA, "Pres", "Time", "HR"), ...10 = c("1", "1", "3", NA, "Walk", 
    NA, NA, NA, NA), ...11 = c(NA, NA, NA, NA, NA, NA, "Done", 
    "Time", "HR"), ...12 = c(NA, NA, NA, NA, NA, NA, NA, NA, 
    NA)), row.names = c(NA, -9L), class = c("tbl_df", "tbl", 
"data.frame"))
 

Я хочу переместить столбцы 5:8 и 6:12, чтобы они стали дополнительными строками 1:4, чтобы результат был:

 df2 = structure(list(...1 = c("p", "w", "s", NA, "A Ex", NA, "Pres", 
"Time", "HR", "p", "w", "s", NA, "A Ex", NA, "Pres", "Time", 
"HR", "p", "w", "s", NA, "A Ex", NA, "Pres", "Time", "HR"), ...2 = c("1", 
"1", "1", NA, "Walk", NA, NA, NA, NA, "1", "1", "2", NA, "Walk", 
NA, NA, NA, NA, "1", "1", "3", NA, "Walk", NA, NA, NA, NA), ...3 = c(NA, 
NA, NA, NA, NA, NA, "Done", "Time", "HR", NA, NA, NA, NA, NA, 
NA, "Done", "Time", "HR", NA, NA, NA, NA, NA, NA, "Done", "Time", 
"HR"), ...4 = c(NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA)), row.names = c(NA, 
-27L), class = c("tbl_df", "tbl", "data.frame"))
 

Ответ №1:

основание R

Основная предпосылка состоит в том, чтобы разбиться на группы по 4 столбца:

 splitframes <- split.default(d1, (seq_along(d1)-1) %/% 4)
splitframes
# 
 #r #row #columnsorting



Вопрос:

Я преобразую грязный лист Excel в полезные данные. Базовая структура представляет собой повторяющийся блок переменных с аналогичными элементами в строках. Я хочу переместить столбцы так, чтобы они стали строками первого блока столбцов. Трудно описать, так что вот mwe.
 d1 = structure(list(...1 = c("p", "w", "s", NA, "A Ex", NA, "Pres", 
"Time", "HR"), ...2 = c("1", "1", "1", NA, "Walk", NA, NA, NA, 
NA), ...3 = c(NA, NA, NA, NA, NA, NA, "Done", "Time", "HR"), 
    ...4 = c(NA, NA, NA, NA, NA, NA, NA, NA, NA), ...5 = c("p", 
    "w", "s", NA, "A Ex", NA, "Pres", "Time", "HR"), ...6 = c("1", 
    "1", "2", NA, "Walk", NA, NA, NA, NA), ...7 = c(NA, NA, NA, 
    NA, NA, NA, "Done", "Time", "HR"), ...8 = c(NA, NA, NA, NA, 
    NA, NA, NA, NA, NA), ...9 = c("p", "w", "s", NA, "A Ex", 
    NA, "Pres", "Time", "HR"), ...10 = c("1", "1", "3", NA, "Walk", 
    NA, NA, NA, NA), ...11 = c(NA, NA, NA, NA, NA, NA, "Done", 
    "Time", "HR"), ...12 = c(NA, NA, NA, NA, NA, NA, NA, NA, 
    NA)), row.names = c(NA, -9L), class = c("tbl_df", "tbl", 
"data.frame"))
 

Я хочу переместить столбцы 5:8 и 6:12, чтобы они стали дополнительными строками 1:4, чтобы результат был:

 df2 = structure(list(...1 = c("p", "w", "s", NA, "A Ex", NA, "Pres", 
"Time", "HR", "p", "w", "s", NA, "A Ex", NA, "Pres", "Time", 
"HR", "p", "w", "s", NA, "A Ex", NA, "Pres", "Time", "HR"), ...2 = c("1", 
"1", "1", NA, "Walk", NA, NA, NA, NA, "1", "1", "2", NA, "Walk", 
NA, NA, NA, NA, "1", "1", "3", NA, "Walk", NA, NA, NA, NA), ...3 = c(NA, 
NA, NA, NA, NA, NA, "Done", "Time", "HR", NA, NA, NA, NA, NA, 
NA, "Done", "Time", "HR", NA, NA, NA, NA, NA, NA, "Done", "Time", 
"HR"), ...4 = c(NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA)), row.names = c(NA, 
-27L), class = c("tbl_df", "tbl", "data.frame"))
 

Ответ №1:

основание R

Основная предпосылка состоит в том, чтобы разбиться на группы по 4 столбца:

0`
# # A tibble: 9 x 4
# ...1 ...2 ...3 ...4
# <chr> <chr> <chr> <lgl>
# 1 p 1 <NA> NA
# 2 w 1 <NA> NA
# 3 s 1 <NA> NA
# 4 <NA> <NA> <NA> NA
# 5 A Ex Walk <NA> NA
# 6 <NA> <NA> <NA> NA
# 7 Pres <NA> Done NA
# 8 Time <NA> Time NA
# 9 HR <NA> HR NA
#

#r #row #columnsorting

Вопрос:

Я преобразую грязный лист Excel в полезные данные. Базовая структура представляет собой повторяющийся блок переменных с аналогичными элементами в строках. Я хочу переместить столбцы так, чтобы они стали строками первого блока столбцов.

Трудно описать, так что вот mwe.

 d1 = structure(list(...1 = c("p", "w", "s", NA, "A Ex", NA, "Pres", 
"Time", "HR"), ...2 = c("1", "1", "1", NA, "Walk", NA, NA, NA, 
NA), ...3 = c(NA, NA, NA, NA, NA, NA, "Done", "Time", "HR"), 
    ...4 = c(NA, NA, NA, NA, NA, NA, NA, NA, NA), ...5 = c("p", 
    "w", "s", NA, "A Ex", NA, "Pres", "Time", "HR"), ...6 = c("1", 
    "1", "2", NA, "Walk", NA, NA, NA, NA), ...7 = c(NA, NA, NA, 
    NA, NA, NA, "Done", "Time", "HR"), ...8 = c(NA, NA, NA, NA, 
    NA, NA, NA, NA, NA), ...9 = c("p", "w", "s", NA, "A Ex", 
    NA, "Pres", "Time", "HR"), ...10 = c("1", "1", "3", NA, "Walk", 
    NA, NA, NA, NA), ...11 = c(NA, NA, NA, NA, NA, NA, "Done", 
    "Time", "HR"), ...12 = c(NA, NA, NA, NA, NA, NA, NA, NA, 
    NA)), row.names = c(NA, -9L), class = c("tbl_df", "tbl", 
"data.frame"))
 

Я хочу переместить столбцы 5:8 и 6:12, чтобы они стали дополнительными строками 1:4, чтобы результат был:

 df2 = structure(list(...1 = c("p", "w", "s", NA, "A Ex", NA, "Pres", 
"Time", "HR", "p", "w", "s", NA, "A Ex", NA, "Pres", "Time", 
"HR", "p", "w", "s", NA, "A Ex", NA, "Pres", "Time", "HR"), ...2 = c("1", 
"1", "1", NA, "Walk", NA, NA, NA, NA, "1", "1", "2", NA, "Walk", 
NA, NA, NA, NA, "1", "1", "3", NA, "Walk", NA, NA, NA, NA), ...3 = c(NA, 
NA, NA, NA, NA, NA, "Done", "Time", "HR", NA, NA, NA, NA, NA, 
NA, "Done", "Time", "HR", NA, NA, NA, NA, NA, NA, "Done", "Time", 
"HR"), ...4 = c(NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA)), row.names = c(NA, 
-27L), class = c("tbl_df", "tbl", "data.frame"))
 

Ответ №1:

основание R

Основная предпосылка состоит в том, чтобы разбиться на группы по 4 столбца:

1`
# # A tibble: 9 x 4
# ...1 ...2 ...3 ...4
# <chr> <chr> <chr> <lgl>
# 1 p 1 <NA> NA
# 2 w 1 <NA> NA

К сожалению, rbind.data.frame необходимо, чтобы все аргументы имели одинаковые имена,

1`
# [1] "...5" "...6" "...7" "...8"
#

#r #row #columnsorting

Вопрос:

Я преобразую грязный лист Excel в полезные данные. Базовая структура представляет собой повторяющийся блок переменных с аналогичными элементами в строках. Я хочу переместить столбцы так, чтобы они стали строками первого блока столбцов.

Трудно описать, так что вот mwe.

 d1 = structure(list(...1 = c("p", "w", "s", NA, "A Ex", NA, "Pres", 
"Time", "HR"), ...2 = c("1", "1", "1", NA, "Walk", NA, NA, NA, 
NA), ...3 = c(NA, NA, NA, NA, NA, NA, "Done", "Time", "HR"), 
    ...4 = c(NA, NA, NA, NA, NA, NA, NA, NA, NA), ...5 = c("p", 
    "w", "s", NA, "A Ex", NA, "Pres", "Time", "HR"), ...6 = c("1", 
    "1", "2", NA, "Walk", NA, NA, NA, NA), ...7 = c(NA, NA, NA, 
    NA, NA, NA, "Done", "Time", "HR"), ...8 = c(NA, NA, NA, NA, 
    NA, NA, NA, NA, NA), ...9 = c("p", "w", "s", NA, "A Ex", 
    NA, "Pres", "Time", "HR"), ...10 = c("1", "1", "3", NA, "Walk", 
    NA, NA, NA, NA), ...11 = c(NA, NA, NA, NA, NA, NA, "Done", 
    "Time", "HR"), ...12 = c(NA, NA, NA, NA, NA, NA, NA, NA, 
    NA)), row.names = c(NA, -9L), class = c("tbl_df", "tbl", 
"data.frame"))
 

Я хочу переместить столбцы 5:8 и 6:12, чтобы они стали дополнительными строками 1:4, чтобы результат был:

 df2 = structure(list(...1 = c("p", "w", "s", NA, "A Ex", NA, "Pres", 
"Time", "HR", "p", "w", "s", NA, "A Ex", NA, "Pres", "Time", 
"HR", "p", "w", "s", NA, "A Ex", NA, "Pres", "Time", "HR"), ...2 = c("1", 
"1", "1", NA, "Walk", NA, NA, NA, NA, "1", "1", "2", NA, "Walk", 
NA, NA, NA, NA, "1", "1", "3", NA, "Walk", NA, NA, NA, NA), ...3 = c(NA, 
NA, NA, NA, NA, NA, "Done", "Time", "HR", NA, NA, NA, NA, NA, 
NA, "Done", "Time", "HR", NA, NA, NA, NA, NA, NA, "Done", "Time", 
"HR"), ...4 = c(NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA)), row.names = c(NA, 
-27L), class = c("tbl_df", "tbl", "data.frame"))
 

Ответ №1:

основание R

Основная предпосылка состоит в том, чтобы разбиться на группы по 4 столбца:

 splitframes <- split.default(d1, (seq_along(d1)-1) %/% 4)
splitframes
# 
 #r #row #columnsorting



Вопрос:

Я преобразую грязный лист Excel в полезные данные. Базовая структура представляет собой повторяющийся блок переменных с аналогичными элементами в строках. Я хочу переместить столбцы так, чтобы они стали строками первого блока столбцов. Трудно описать, так что вот mwe.
 d1 = structure(list(...1 = c("p", "w", "s", NA, "A Ex", NA, "Pres", 
"Time", "HR"), ...2 = c("1", "1", "1", NA, "Walk", NA, NA, NA, 
NA), ...3 = c(NA, NA, NA, NA, NA, NA, "Done", "Time", "HR"), 
    ...4 = c(NA, NA, NA, NA, NA, NA, NA, NA, NA), ...5 = c("p", 
    "w", "s", NA, "A Ex", NA, "Pres", "Time", "HR"), ...6 = c("1", 
    "1", "2", NA, "Walk", NA, NA, NA, NA), ...7 = c(NA, NA, NA, 
    NA, NA, NA, "Done", "Time", "HR"), ...8 = c(NA, NA, NA, NA, 
    NA, NA, NA, NA, NA), ...9 = c("p", "w", "s", NA, "A Ex", 
    NA, "Pres", "Time", "HR"), ...10 = c("1", "1", "3", NA, "Walk", 
    NA, NA, NA, NA), ...11 = c(NA, NA, NA, NA, NA, NA, "Done", 
    "Time", "HR"), ...12 = c(NA, NA, NA, NA, NA, NA, NA, NA, 
    NA)), row.names = c(NA, -9L), class = c("tbl_df", "tbl", 
"data.frame"))
 

Я хочу переместить столбцы 5:8 и 6:12, чтобы они стали дополнительными строками 1:4, чтобы результат был:

 df2 = structure(list(...1 = c("p", "w", "s", NA, "A Ex", NA, "Pres", 
"Time", "HR", "p", "w", "s", NA, "A Ex", NA, "Pres", "Time", 
"HR", "p", "w", "s", NA, "A Ex", NA, "Pres", "Time", "HR"), ...2 = c("1", 
"1", "1", NA, "Walk", NA, NA, NA, NA, "1", "1", "2", NA, "Walk", 
NA, NA, NA, NA, "1", "1", "3", NA, "Walk", NA, NA, NA, NA), ...3 = c(NA, 
NA, NA, NA, NA, NA, "Done", "Time", "HR", NA, NA, NA, NA, NA, 
NA, "Done", "Time", "HR", NA, NA, NA, NA, NA, NA, "Done", "Time", 
"HR"), ...4 = c(NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA)), row.names = c(NA, 
-27L), class = c("tbl_df", "tbl", "data.frame"))
 

Ответ №1:

основание R

Основная предпосылка состоит в том, чтобы разбиться на группы по 4 столбца:

0`
# # A tibble: 9 x 4
# ...1 ...2 ...3 ...4
# <chr> <chr> <chr> <lgl>
# 1 p 1 <NA> NA
# 2 w 1 <NA> NA
# 3 s 1 <NA> NA
# 4 <NA> <NA> <NA> NA
# 5 A Ex Walk <NA> NA
# 6 <NA> <NA> <NA> NA
# 7 Pres <NA> Done NA
# 8 Time <NA> Time NA
# 9 HR <NA> HR NA
#

#r #row #columnsorting

Вопрос:

Я преобразую грязный лист Excel в полезные данные. Базовая структура представляет собой повторяющийся блок переменных с аналогичными элементами в строках. Я хочу переместить столбцы так, чтобы они стали строками первого блока столбцов.

Трудно описать, так что вот mwe.

 d1 = structure(list(...1 = c("p", "w", "s", NA, "A Ex", NA, "Pres", 
"Time", "HR"), ...2 = c("1", "1", "1", NA, "Walk", NA, NA, NA, 
NA), ...3 = c(NA, NA, NA, NA, NA, NA, "Done", "Time", "HR"), 
    ...4 = c(NA, NA, NA, NA, NA, NA, NA, NA, NA), ...5 = c("p", 
    "w", "s", NA, "A Ex", NA, "Pres", "Time", "HR"), ...6 = c("1", 
    "1", "2", NA, "Walk", NA, NA, NA, NA), ...7 = c(NA, NA, NA, 
    NA, NA, NA, "Done", "Time", "HR"), ...8 = c(NA, NA, NA, NA, 
    NA, NA, NA, NA, NA), ...9 = c("p", "w", "s", NA, "A Ex", 
    NA, "Pres", "Time", "HR"), ...10 = c("1", "1", "3", NA, "Walk", 
    NA, NA, NA, NA), ...11 = c(NA, NA, NA, NA, NA, NA, "Done", 
    "Time", "HR"), ...12 = c(NA, NA, NA, NA, NA, NA, NA, NA, 
    NA)), row.names = c(NA, -9L), class = c("tbl_df", "tbl", 
"data.frame"))
 

Я хочу переместить столбцы 5:8 и 6:12, чтобы они стали дополнительными строками 1:4, чтобы результат был:

 df2 = structure(list(...1 = c("p", "w", "s", NA, "A Ex", NA, "Pres", 
"Time", "HR", "p", "w", "s", NA, "A Ex", NA, "Pres", "Time", 
"HR", "p", "w", "s", NA, "A Ex", NA, "Pres", "Time", "HR"), ...2 = c("1", 
"1", "1", NA, "Walk", NA, NA, NA, NA, "1", "1", "2", NA, "Walk", 
NA, NA, NA, NA, "1", "1", "3", NA, "Walk", NA, NA, NA, NA), ...3 = c(NA, 
NA, NA, NA, NA, NA, "Done", "Time", "HR", NA, NA, NA, NA, NA, 
NA, "Done", "Time", "HR", NA, NA, NA, NA, NA, NA, "Done", "Time", 
"HR"), ...4 = c(NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA)), row.names = c(NA, 
-27L), class = c("tbl_df", "tbl", "data.frame"))
 

Ответ №1:

основание R

Основная предпосылка состоит в том, чтобы разбиться на группы по 4 столбца:

1`
# # A tibble: 9 x 4
# ...1 ...2 ...3 ...4
# <chr> <chr> <chr> <lgl>
# 1 p 1 <NA> NA
# 2 w 1 <NA> NA

К сожалению, rbind.data.frame необходимо, чтобы все аргументы имели одинаковые имена,

2`
# [1] "...9" "...10" "...11" "...12"

так что сначала нам нужно это исправить:

 splitframes <- lapply(splitframes, `colnames<-`, names(splitframes[[1]]))
do.call(rbind, splitframes)
# # A tibble: 27 x 4
#    ...1  ...2  ...3  ...4 
#  * <chr> <chr> <chr> <lgl>
#  1 p     1     <NA>  NA   
#  2 w     1     <NA>  NA   
#  3 s     1     <NA>  NA   
#  4 <NA>  <NA>  <NA>  NA   
#  5 A Ex  Walk  <NA>  NA   
#  6 <NA>  <NA>  <NA>  NA   
#  7 Pres  <NA>  Done  NA   
#  8 Time  <NA>  Time  NA   
#  9 HR    <NA>  HR    NA   
# 10 p     1     <NA>  NA   
# # ... with 17 more rows
 

dplyr

Этот пакет немного более удобен:

 splitframes <- split.default(d1, (seq_along(d1)-1) %/% 4)
dplyr::bind_rows(splitframes)
# New names:
# * ...5 -> ...1
# * ...6 -> ...2
# * ...7 -> ...3
# * ...8 -> ...4
# New names:
# * ...9 -> ...1
# * ...10 -> ...2
# * ...11 -> ...3
# * ...12 -> ...4
# # A tibble: 27 x 4
#    ...1  ...2  ...3  ...4 
#    <chr> <chr> <chr> <lgl>
#  1 p     1     <NA>  NA   
#  2 w     1     <NA>  NA   
#  3 s     1     <NA>  NA   
#  4 <NA>  <NA>  <NA>  NA   
#  5 A Ex  Walk  <NA>  NA   
#  6 <NA>  <NA>  <NA>  NA   
#  7 Pres  <NA>  Done  NA   
#  8 Time  <NA>  Time  NA   
#  9 HR    <NA>  HR    NA   
# 10 p     1     <NA>  NA   
# # ... with 17 more rows
 

данные.таблица

 splitframes <- split.default(d1, (seq_along(d1)-1) %/% 4)
library(data.table)
rbindlist(splitframes)
# Column 1 ['...5'] of item 2 is missing in item 1. Use fill=TRUE to fill with NA (NULL for list columns), or use.names=FALSE to ignore column names. use.names='check' (default from v1.12.2) emits this message and proceeds as if use.names=FALSE for  backwards compatibility. See news item 5 in v1.12.2 for options to control this message.
#       ...1   ...2   ...3   ...4
#     <char> <char> <char> <lgcl>
#  1:      p      1   <NA>     NA
#  2:      w      1   <NA>     NA
#  3:      s      1   <NA>     NA
#  4:   <NA>   <NA>   <NA>     NA
 

Чтобы заставить замолчать это сообщение, используйте вместо rbindlist(..., use.names=FALSE) этого .