#r #casting #melt
#r #Кастинг #расплав
Вопрос:
Итак, в настоящее время данные выглядят так. Средний столбец — это средняя почасовая заработная плата. Среднее значение — это средняя годовая заработная плата, следовательно, ann в конце. Ввод следует той же логике. Однако, пытаясь сделать его похожим на предполагаемый результат ниже
ID mean meanann entry entryann
32100 100 5200 99 5148
32101 101 5252 100 5200
Предполагаемый результат
ID mean entry
32100 100 99
32100 5200 5148
32101 101 100
32101 5252 5200
Использовал это (https://ademos .people.uic.edu/Chapter8.html ) в качестве учебного пособия, но не нахожу ничего, что делало бы это как таковое. Я знаю, что вы бы выполнили melt и указали свои переменные ID, но проблема в том, что сначала он складывает все мои средние наблюдения, а затем все средние значения и так далее.
Ответ №1:
Вы можете сделать это проще с pivot_longer
помощью from tidyr
:
tidyr::pivot_longer(df, 2:5, names_pattern = "^(mean|entry)", names_to = ".value")
#> # A tibble: 4 x 3
#> ID mean entry
#> <int> <int> <int>
#> 1 32100 100 99
#> 2 32100 5200 5148
#> 3 32101 101 100
#> 4 32101 5252 5200
Комментарии:
1. Спасибо. Тем не менее, некоторые уточняющие вопросы. {4} .. представляет ли это количество столбцов в оригинале? Кроме того, 2: 5, к чему это относится?
2.
"(mean|entry)"
может быть лучше и понятнееnames_pattern
.3. @TimWilcox 2: 5 — это номера столбцов, содержащих значения. Шаблон names — это регулярное выражение для объединения соответствующих столбцов, которые вы хотите объединить
4. @GregorThomas Вы абсолютно правы. Обновлено, с благодарностью.
Ответ №2:
melt
из data.table
можно использовать patterns
в measure
library(data.table)
melt(setDT(df), measure = patterns("^mean", "^entry"),
value.name = c("mean", "entry"))[, variable := NULL][]
# ID mean entry
#1: 32100 100 99
#2: 32101 101 100
#3: 32100 5200 5148
#4: 32101 5252 5200
данные
df <- structure(list(ID = 32100:32101, mean = 100:101, meanann = c(5200L,
5252L), entry = 99:100, entryann = c(5148L, 5200L)),
class = "data.frame", row.names = c(NA,
-2L))