Вот один подход для вас. Ваши данные здесь называются mydf
. Сначала вы хотите выбрать необходимые столбцы (например, name
и x1
), используя select()
. Затем вы хотите поднастроить строки, используя filter()
. Вы хотите получить строки, начинающиеся с V2
или V3
в строках. grepl()
проверяет, имеет ли каждая строка шаблон. Затем вы хотите разделить столбец name
и создать два столбца (т. Е. name
и est
). Наконец, вы хотите преобразовать данные в данные в длинном формате, используя pivot_wider()
.
library(dplyr)
library(tidyr)
select(mydf, name:x1) %>%
filter(grepl(x = name, pattern = "^V[2|3]")) %>%
separate(col = name, into = c("name", "est"), sep = "_") %>%
pivot_wider(names_from = "est",values_from = "x1", names_prefix = "est_")
# name est_3 est_15 est_25 est_35 est_47 est_57
# <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
#1 V2 1.12 1.07 1.07 1.05 1.03 1.13
#2 V3 0.917 0.867 0.917 0.994 0.937 1.03
Для справки, когда вы задаете вопросы, вы хотите предоставить минимальный пример данных и кода. Если вы можете сделать это, пользователи SO могут легко помочь вам. Пожалуйста, прочитайте этот вопрос .
ДАННЫЕ
mydf <- structure(list(name = c("V1_3", "V2_3", "V3_3", "V1_15", "V2_15",
"V3_15", "V1_25", "V2_25", "V3_25", "V1_35", "V2_35", "V3_35",
"V1_47", "V2_47", "V3_47", "V1_57", "V2_57", "V3_57"), x1 = c(1,
1.122, 0.917, 1, 1.069, 0.867, 1, 1.066, 0.917, 1, 1.048, 0.994,
1, 1.03, 0.937, 1, 1.133, 1.032), x2 = c(0, 0.044, 0.045, 0,
0.036, 0.039, 0, 0.034, 0.037, 0, 0.034, 0.037, 0, 0.031, 0.034,
0, 0.036, 0.037), x3 = c(999, 25.446, 20.385, 999, 29.751, 22.478,
999, 31.134, 24.565, 999, 31.18, 26.587, 999, 33.637, 27.405,
999, 31.883, 28.081), x4 = c(999, 0, 0, 999, 0, 0, 999, 0, 0,
999, 0, 0, 999, 0, 0, 999, 0, 0)), row.names = c(NA, -18L), class = c("tbl_df",
"tbl", "data.frame"))