#r #dataframe #plot #graph
Вопрос:
У меня есть фрейм данных, как показано ниже:
Эти данные сохраняются в виде переменной «filterWage».
Этот фрейм данных содержит столбцы Страна.Код, Серия.Код и диапазон столбцов с X1992 по X2016 (пожалуйста, имейте в виду, что я не мог вместить все столбцы с X1992 по X2016, поэтому на изображении показано только до x2003).
Цель состоит в том, чтобы отобразить этот диапазон столбцов с X1992 по X2016 в виде оси x, а значение этих столбцов-в виде оси y для всех трех стран.Код на том же графике с использованием ggplot.
Желаемый результат: ( пожалуйста, обратите внимание, что изображение является всего лишь грубым наброском, а значения действительно бессмысленны)
Это вывод с помощью dput:
dput(фильтрация)
structure(list(Country.Code = c("LIC", "HIC", "MIC"), Series.Code = c("SL.EMP.WORK.ZS",
"SL.EMP.WORK.ZS", "SL.EMP.WORK.ZS"), X1991 = c("20.9370976972316",
"81.0876932275574", "35.5281394063616"), X1992 = c("20.5114136551512",
"81.1351300966788", "36.1635880437505"), X1993 = c("20.309137441086",
"81.2165339365649", "37.1943086793304"), X1994 = c("20.5295488411938",
"81.3404039783739", "37.8383615292357"), X1995 = c("20.6817100202905",
"81.6237989883691", "38.6979499878051"), X1996 = c("20.6371916830899",
"81.8361588628956", "39.5068057398044"), X1997 = c("20.286823787263",
"82.140587079514", "40.0301927962263"), X1998 = c("20.3800244386649",
"82.4387485706644", "40.1689926776"), X1999 = c("20.764112251619",
"82.7303105606365", "40.3738643748966"), X2000 = c("20.5693165666214",
"83.0691410634413", "40.7860042844162"), X2001 = c("20.6682554227926",
"83.204549665691", "40.192062080076"), X2002 = c("20.8364224185492",
"83.3236267668205", "40.5335866623684"), X2003 = c("20.9073131339766",
"83.3872571313811", "41.139037517746"), X2004 = c("20.9741288400519",
"83.4445860257721", "42.2303006080139"), X2005 = c("20.6931847813705",
"83.7017144881631", "43.2626386469723"), X2006 = c("21.0482961178193",
"84.0126990344844", "44.4032188240263"), X2007 = c("21.3789126998501",
"84.3099847840774", "45.3836159214118"), X2008 = c("21.713214795025",
"84.5962197639565", "46.1155674823931"), X2009 = c("21.9697284827288",
"84.5498700141843", "46.8058440395641"), X2010 = c("22.3676584297642",
"84.614095791104", "47.6604416403023"), X2011 = c("22.383629219082",
"84.8323447185694", "48.6708213003224"), X2012 = c("22.6398140927035",
"85.1570293953982", "49.2830314898562"), X2013 = c("23.0490884430663",
"85.3153737253528", "49.5549460027067"), X2014 = c("22.8973838689315",
"85.4292150603637", "50.0215575751258"), X2015 = c("22.9079191238809",
"85.6087846399656", "50.3787072273931"), X2016 = c("22.8986911131366",
"85.7321179083769", "50.5504090357067")), row.names = c(166L,
332L, 498L), class = "data.frame")
Комментарии:
1. Не могли бы вы, пожалуйста, поместить данные не в виде изображения, а в виде кода? Предпочтительно на выходе
dput(DATA_NAME)
.2. Как этот график соотносится с вашими данными? Значения варьируются не от -2,5 до 4,5, а от 20,28682 до 85,73212…
3. У меня была подпись к изображению «пожалуйста, игнорируйте неправильные значения», но почему-то подпись никогда не показывалась. Извините за недоразумение и спасибо за ответ, это действительно был правильный ответ, который я искал.
Ответ №1:
Вот решение с использованием tidyr
и dplyr
(а также ggplot2
):
library(ggplot2)
library(tidyr)
library(dplyr)
filterWage %>%
tidyr::pivot_longer(cols = starts_with("X"), names_to = "years", values_to = "value") %>%
dplyr::mutate(years = as.numeric(gsub("X", "", years)), value = as.numeric(value)) %>%
ggplot(aes(x = years, y = value, colour = Country.Code))
geom_line()
theme_minimal()
Я не могу проверить это, потому что у меня нет ваших данных, но это должно сработать.
Идея заключается в том, что я превратил все эти столбцы в одну пару столбцов, в одном из которых хранятся прежние имена, а в другом-значения. Таким образом, ваши данные будут в длинном формате, а не в широком. ggplot
всегда любит брать данные в длинном формате. Затем mutate()
преобразуйте оба столбца в числовые переменные, удалив «X» в годах.
Вот результат:
Комментарии:
1. Извините, но там написано «geom_path: каждая группа состоит только из одного наблюдения. Вам нужно настроить эстетику группы?», и при построении графика на графике не отображается ни линия, ни данные.
2. Вот результат: ibb.co/9YvCPDZ . Кроме того, как можно было бы опубликовать данные
3. Что вы подразумеваете под «позиционированием данных»?
4. Как я прокомментировал ваш вопрос, предоставление выходных
dput(filterWage)
данных-отличный способ.5. Не волнуйся, не кори себя! Это никоим образом не было недостатком компетентности. Теперь ты знаешь это для следующего раза!