R ಪ್ಯಾಕೇಜ್ tidyr ಮತ್ತು ಅದರ ಹೊಸ ಕಾರ್ಯಗಳು pivot_longer ಮತ್ತು pivot_wider

ಪ್ಯಾಕೇಜ್ ಅಚ್ಚುಕಟ್ಟು R ಭಾಷೆಯಲ್ಲಿನ ಅತ್ಯಂತ ಜನಪ್ರಿಯ ಗ್ರಂಥಾಲಯಗಳಲ್ಲಿ ಒಂದನ್ನು ಒಳಗೊಂಡಿದೆ - ಅಚ್ಚುಕಟ್ಟಾದ.
ಡೇಟಾವನ್ನು ನಿಖರವಾದ ರೂಪಕ್ಕೆ ತರುವುದು ಪ್ಯಾಕೇಜ್‌ನ ಮುಖ್ಯ ಉದ್ದೇಶವಾಗಿದೆ.

Habré ನಲ್ಲಿ ಈಗಾಗಲೇ ಲಭ್ಯವಿದೆ ಪ್ರಕಟಣೆ ಈ ಪ್ಯಾಕೇಜ್‌ಗೆ ಸಮರ್ಪಿಸಲಾಗಿದೆ, ಆದರೆ ಇದು 2015 ರ ಹಿಂದಿನದು. ಮತ್ತು ಕೆಲವು ದಿನಗಳ ಹಿಂದೆ ಅದರ ಲೇಖಕ ಹೆಡ್ಲಿ ವಿಕ್ಹ್ಯಾಮ್ ಅವರು ಘೋಷಿಸಿದ ಅತ್ಯಂತ ಪ್ರಸ್ತುತ ಬದಲಾವಣೆಗಳ ಬಗ್ಗೆ ನಾನು ನಿಮಗೆ ಹೇಳಲು ಬಯಸುತ್ತೇನೆ.

R ಪ್ಯಾಕೇಜ್ tidyr ಮತ್ತು ಅದರ ಹೊಸ ಕಾರ್ಯಗಳು pivot_longer ಮತ್ತು pivot_wider

SJK: ಒಟ್ಟುಗೂಡಿಸುವುದೇ() ಮತ್ತು ಹರಡುವಿಕೆ() ಅಸಮ್ಮತಿಯಾಗುತ್ತದೆಯೇ?

ಹ್ಯಾಡ್ಲಿ ವಿಕ್ಹ್ಯಾಮ್: ಒಂದು ಹಂತಕ್ಕೆ. ಈ ಕಾರ್ಯಗಳ ಬಳಕೆಯನ್ನು ನಾವು ಇನ್ನು ಮುಂದೆ ಶಿಫಾರಸು ಮಾಡುವುದಿಲ್ಲ ಮತ್ತು ಅವುಗಳಲ್ಲಿನ ದೋಷಗಳನ್ನು ಸರಿಪಡಿಸುವುದಿಲ್ಲ, ಆದರೆ ಅವುಗಳು ಪ್ರಸ್ತುತ ಸ್ಥಿತಿಯಲ್ಲಿ ಪ್ಯಾಕೇಜ್‌ನಲ್ಲಿ ಇರುತ್ತವೆ.

ಪರಿವಿಡಿ

ನೀವು ಡೇಟಾ ವಿಶ್ಲೇಷಣೆಯಲ್ಲಿ ಆಸಕ್ತಿ ಹೊಂದಿದ್ದರೆ, ನೀವು ನನ್ನ ಬಗ್ಗೆ ಆಸಕ್ತಿ ಹೊಂದಿರಬಹುದು ಟೆಲಿಗ್ರಾಮ್ и YouTube ವಾಹಿನಿಗಳು. ಹೆಚ್ಚಿನ ವಿಷಯವನ್ನು R ಭಾಷೆಗೆ ಮೀಸಲಿಡಲಾಗಿದೆ.

ಅಚ್ಚುಕಟ್ಟಾದ ಡೇಟಾ ಪರಿಕಲ್ಪನೆ

ಗುರಿ ಅಚ್ಚುಕಟ್ಟು — ಅಚ್ಚುಕಟ್ಟಾದ ರೂಪ ಎಂದು ಕರೆಯಲ್ಪಡುವ ಡೇಟಾವನ್ನು ತರಲು ನಿಮಗೆ ಸಹಾಯ ಮಾಡುತ್ತದೆ. ಅಚ್ಚುಕಟ್ಟಾದ ಡೇಟಾವು ಇಲ್ಲಿ ಡೇಟಾವಾಗಿದೆ:

  • ಪ್ರತಿಯೊಂದು ವೇರಿಯಬಲ್ ಒಂದು ಕಾಲಮ್‌ನಲ್ಲಿದೆ.
  • ಪ್ರತಿಯೊಂದು ವೀಕ್ಷಣೆಯು ಒಂದು ಸ್ಟ್ರಿಂಗ್ ಆಗಿದೆ.
  • ಪ್ರತಿಯೊಂದು ಮೌಲ್ಯವು ಒಂದು ಕೋಶವಾಗಿದೆ.

ವಿಶ್ಲೇಷಣೆ ನಡೆಸುವಾಗ ಅಚ್ಚುಕಟ್ಟಾದ ಡೇಟಾದಲ್ಲಿ ಪ್ರಸ್ತುತಪಡಿಸಲಾದ ಡೇಟಾದೊಂದಿಗೆ ಕೆಲಸ ಮಾಡುವುದು ಹೆಚ್ಚು ಸುಲಭ ಮತ್ತು ಹೆಚ್ಚು ಅನುಕೂಲಕರವಾಗಿದೆ.

ಟೈಡಿರ್ ಪ್ಯಾಕೇಜ್‌ನಲ್ಲಿ ಮುಖ್ಯ ಕಾರ್ಯಗಳನ್ನು ಸೇರಿಸಲಾಗಿದೆ

tidyr ಕೋಷ್ಟಕಗಳನ್ನು ಪರಿವರ್ತಿಸಲು ವಿನ್ಯಾಸಗೊಳಿಸಲಾದ ಕಾರ್ಯಗಳ ಗುಂಪನ್ನು ಒಳಗೊಂಡಿದೆ:

  • fill() - ಹಿಂದಿನ ಮೌಲ್ಯಗಳೊಂದಿಗೆ ಕಾಲಮ್‌ನಲ್ಲಿ ಕಾಣೆಯಾದ ಮೌಲ್ಯಗಳನ್ನು ಭರ್ತಿ ಮಾಡುವುದು;
  • separate() - ವಿಭಜಕವನ್ನು ಬಳಸಿಕೊಂಡು ಒಂದು ಕ್ಷೇತ್ರವನ್ನು ಹಲವಾರು ಭಾಗಗಳಾಗಿ ವಿಭಜಿಸುತ್ತದೆ;
  • unite() - ಹಲವಾರು ಕ್ಷೇತ್ರಗಳನ್ನು ಒಂದಾಗಿ ಸಂಯೋಜಿಸುವ ಕಾರ್ಯಾಚರಣೆಯನ್ನು ನಿರ್ವಹಿಸುತ್ತದೆ, ಕ್ರಿಯೆಯ ವಿಲೋಮ ಕ್ರಿಯೆ separate();
  • pivot_longer() - ಡೇಟಾವನ್ನು ವಿಶಾಲ ಸ್ವರೂಪದಿಂದ ದೀರ್ಘ ಸ್ವರೂಪಕ್ಕೆ ಪರಿವರ್ತಿಸುವ ಕಾರ್ಯ;
  • pivot_wider() - ದೀರ್ಘ ಸ್ವರೂಪದಿಂದ ವಿಶಾಲ ಸ್ವರೂಪಕ್ಕೆ ಡೇಟಾವನ್ನು ಪರಿವರ್ತಿಸುವ ಕಾರ್ಯ. ಕಾರ್ಯದಿಂದ ನಿರ್ವಹಿಸಲಾದ ಒಂದರ ಹಿಮ್ಮುಖ ಕಾರ್ಯಾಚರಣೆ pivot_longer().
  • gather()ಬಳಕೆಯಲ್ಲಿಲ್ಲ - ಡೇಟಾವನ್ನು ವಿಶಾಲ ಸ್ವರೂಪದಿಂದ ದೀರ್ಘ ಸ್ವರೂಪಕ್ಕೆ ಪರಿವರ್ತಿಸುವ ಕಾರ್ಯ;
  • spread()ಬಳಕೆಯಲ್ಲಿಲ್ಲ - ದೀರ್ಘ ಸ್ವರೂಪದಿಂದ ವಿಶಾಲ ಸ್ವರೂಪಕ್ಕೆ ಡೇಟಾವನ್ನು ಪರಿವರ್ತಿಸುವ ಕಾರ್ಯ. ಕಾರ್ಯದಿಂದ ನಿರ್ವಹಿಸಲಾದ ಒಂದರ ಹಿಮ್ಮುಖ ಕಾರ್ಯಾಚರಣೆ gather().

ಡೇಟಾವನ್ನು ವಿಶಾಲದಿಂದ ದೀರ್ಘ ಸ್ವರೂಪಕ್ಕೆ ಮತ್ತು ಪ್ರತಿಯಾಗಿ ಪರಿವರ್ತಿಸಲು ಹೊಸ ಪರಿಕಲ್ಪನೆ

ಹಿಂದೆ, ಈ ರೀತಿಯ ರೂಪಾಂತರಕ್ಕಾಗಿ ಕಾರ್ಯಗಳನ್ನು ಬಳಸಲಾಗುತ್ತಿತ್ತು gather() и spread(). ಈ ಕಾರ್ಯಗಳ ಅಸ್ತಿತ್ವದ ವರ್ಷಗಳಲ್ಲಿ, ಪ್ಯಾಕೇಜ್‌ನ ಲೇಖಕರು ಸೇರಿದಂತೆ ಹೆಚ್ಚಿನ ಬಳಕೆದಾರರಿಗೆ, ಈ ಕಾರ್ಯಗಳ ಹೆಸರುಗಳು ಮತ್ತು ಅವುಗಳ ವಾದಗಳು ಸಾಕಷ್ಟು ಸ್ಪಷ್ಟವಾಗಿಲ್ಲ ಮತ್ತು ಅವುಗಳನ್ನು ಹುಡುಕುವಲ್ಲಿ ಮತ್ತು ಈ ಕಾರ್ಯಗಳಲ್ಲಿ ಯಾವುದನ್ನು ಪರಿವರ್ತಿಸುತ್ತದೆ ಎಂಬುದನ್ನು ಅರ್ಥಮಾಡಿಕೊಳ್ಳುವಲ್ಲಿ ತೊಂದರೆಗಳನ್ನು ಉಂಟುಮಾಡಿತು ಎಂಬುದು ಸ್ಪಷ್ಟವಾಯಿತು. ಅಗಲದಿಂದ ದೀರ್ಘ ಸ್ವರೂಪಕ್ಕೆ ದಿನಾಂಕ ಚೌಕಟ್ಟು, ಮತ್ತು ಪ್ರತಿಯಾಗಿ.

ಈ ನಿಟ್ಟಿನಲ್ಲಿ, ರಲ್ಲಿ ಅಚ್ಚುಕಟ್ಟು ದಿನಾಂಕ ಚೌಕಟ್ಟುಗಳನ್ನು ಪರಿವರ್ತಿಸಲು ವಿನ್ಯಾಸಗೊಳಿಸಲಾದ ಎರಡು ಹೊಸ, ಪ್ರಮುಖ ಕಾರ್ಯಗಳನ್ನು ಸೇರಿಸಲಾಗಿದೆ.

ಹೊಸ ವೈಶಿಷ್ಟ್ಯಗಳು pivot_longer() и pivot_wider() ಪ್ಯಾಕೇಜ್‌ನಲ್ಲಿನ ಕೆಲವು ವೈಶಿಷ್ಟ್ಯಗಳಿಂದ ಸ್ಫೂರ್ತಿ ಪಡೆದಿವೆ cdata, ಜಾನ್ ಮೌಂಟ್ ಮತ್ತು ನೀನಾ ಜುಮೆಲ್ ರಚಿಸಿದ್ದಾರೆ.

tidyr 0.8.3.9000 ನ ಅತ್ಯಂತ ಪ್ರಸ್ತುತ ಆವೃತ್ತಿಯನ್ನು ಸ್ಥಾಪಿಸಲಾಗುತ್ತಿದೆ

ಪ್ಯಾಕೇಜ್‌ನ ಹೊಸ, ಅತ್ಯಂತ ಪ್ರಸ್ತುತ ಆವೃತ್ತಿಯನ್ನು ಸ್ಥಾಪಿಸಲು ಅಚ್ಚುಕಟ್ಟು 0.8.3.9000, ಹೊಸ ವೈಶಿಷ್ಟ್ಯಗಳು ಲಭ್ಯವಿರುವಲ್ಲಿ, ಈ ಕೆಳಗಿನ ಕೋಡ್ ಬಳಸಿ.

devtools::install_github("tidyverse/tidyr")

ಬರೆಯುವ ಸಮಯದಲ್ಲಿ, ಈ ಕಾರ್ಯಗಳು GitHub ನಲ್ಲಿನ ಪ್ಯಾಕೇಜ್‌ನ dev ಆವೃತ್ತಿಯಲ್ಲಿ ಮಾತ್ರ ಲಭ್ಯವಿರುತ್ತವೆ.

ಹೊಸ ವೈಶಿಷ್ಟ್ಯಗಳಿಗೆ ಪರಿವರ್ತನೆ

ವಾಸ್ತವವಾಗಿ, ಹೊಸ ಕಾರ್ಯಗಳೊಂದಿಗೆ ಕೆಲಸ ಮಾಡಲು ಹಳೆಯ ಸ್ಕ್ರಿಪ್ಟ್‌ಗಳನ್ನು ವರ್ಗಾಯಿಸುವುದು ಕಷ್ಟವೇನಲ್ಲ; ಉತ್ತಮ ತಿಳುವಳಿಕೆಗಾಗಿ, ಹಳೆಯ ಕಾರ್ಯಗಳ ದಾಖಲಾತಿಯಿಂದ ನಾನು ಒಂದು ಉದಾಹರಣೆಯನ್ನು ತೆಗೆದುಕೊಳ್ಳುತ್ತೇನೆ ಮತ್ತು ಹೊಸದನ್ನು ಬಳಸಿಕೊಂಡು ಅದೇ ಕಾರ್ಯಾಚರಣೆಗಳನ್ನು ಹೇಗೆ ನಿರ್ವಹಿಸಲಾಗುತ್ತದೆ ಎಂಬುದನ್ನು ತೋರಿಸುತ್ತೇನೆ. pivot_*() ಕಾರ್ಯಗಳು.

ವಿಶಾಲ ಸ್ವರೂಪವನ್ನು ದೀರ್ಘ ಸ್ವರೂಪಕ್ಕೆ ಪರಿವರ್ತಿಸಿ.

ಸಂಗ್ರಹ ಕಾರ್ಯದ ದಸ್ತಾವೇಜನ್ನು ಉದಾಹರಣೆ ಕೋಡ್

# example
library(dplyr)
stocks <- data.frame(
  time = as.Date('2009-01-01') + 0:9,
  X = rnorm(10, 0, 1),
  Y = rnorm(10, 0, 2),
  Z = rnorm(10, 0, 4)
)

# old
stocks_gather <- stocks %>% gather(key   = stock, 
                                   value = price, 
                                   -time)

# new
stocks_long   <- stocks %>% pivot_longer(cols      = -time, 
                                       names_to  = "stock", 
                                       values_to = "price")

ದೀರ್ಘ ಸ್ವರೂಪವನ್ನು ವಿಶಾಲ ಸ್ವರೂಪಕ್ಕೆ ಪರಿವರ್ತಿಸಲಾಗುತ್ತಿದೆ.

ಸ್ಪ್ರೆಡ್ ಫಂಕ್ಷನ್ ದಸ್ತಾವೇಜನ್ನು ಉದಾಹರಣೆ ಕೋಡ್

# old
stocks_spread <- stocks_gather %>% spread(key = stock, 
                                          value = price) 

# new 
stock_wide    <- stocks_long %>% pivot_wider(names_from  = "stock",
                                            values_from = "price")

ಏಕೆಂದರೆ ಕೆಲಸ ಮಾಡುವ ಮೇಲಿನ ಉದಾಹರಣೆಗಳಲ್ಲಿ pivot_longer() и pivot_wider(), ಮೂಲ ಕೋಷ್ಟಕದಲ್ಲಿ ಸ್ಟಾಕ್ಗಳು ಆರ್ಗ್ಯುಮೆಂಟ್‌ಗಳಲ್ಲಿ ಯಾವುದೇ ಕಾಲಮ್‌ಗಳನ್ನು ಪಟ್ಟಿ ಮಾಡಲಾಗಿಲ್ಲ ಹೆಸರುಗಳು_ಗೆ и ಮೌಲ್ಯಗಳು_ಗೆ ಅವರ ಹೆಸರುಗಳು ಉದ್ಧರಣ ಚಿಹ್ನೆಯಲ್ಲಿರಬೇಕು.

ಹೊಸ ಪರಿಕಲ್ಪನೆಯೊಂದಿಗೆ ಕೆಲಸ ಮಾಡಲು ಹೇಗೆ ಬದಲಾಯಿಸುವುದು ಎಂಬುದನ್ನು ಸುಲಭವಾಗಿ ಲೆಕ್ಕಾಚಾರ ಮಾಡಲು ನಿಮಗೆ ಸಹಾಯ ಮಾಡುವ ಟೇಬಲ್ ಅಚ್ಚುಕಟ್ಟು.

R ಪ್ಯಾಕೇಜ್ tidyr ಮತ್ತು ಅದರ ಹೊಸ ಕಾರ್ಯಗಳು pivot_longer ಮತ್ತು pivot_wider

ಲೇಖಕರಿಂದ ಟಿಪ್ಪಣಿ

ಕೆಳಗಿನ ಎಲ್ಲಾ ಪಠ್ಯವು ಹೊಂದಾಣಿಕೆಯಾಗಿದೆ, ನಾನು ಉಚಿತ ಅನುವಾದವನ್ನು ಸಹ ಹೇಳುತ್ತೇನೆ ವಿಗ್ನೆಟ್ಸ್ ಅಧಿಕೃತ ಅಚ್ಚುಕಟ್ಟು ಗ್ರಂಥಾಲಯ ವೆಬ್‌ಸೈಟ್‌ನಿಂದ.

ಡೇಟಾವನ್ನು ವಿಶಾಲದಿಂದ ದೀರ್ಘ ಸ್ವರೂಪಕ್ಕೆ ಪರಿವರ್ತಿಸುವ ಸರಳ ಉದಾಹರಣೆ

pivot_longer () - ಕಾಲಮ್‌ಗಳ ಸಂಖ್ಯೆಯನ್ನು ಕಡಿಮೆ ಮಾಡುವ ಮೂಲಕ ಮತ್ತು ಸಾಲುಗಳ ಸಂಖ್ಯೆಯನ್ನು ಹೆಚ್ಚಿಸುವ ಮೂಲಕ ಡೇಟಾ ಸೆಟ್‌ಗಳನ್ನು ಉದ್ದವಾಗಿಸುತ್ತದೆ.

R ಪ್ಯಾಕೇಜ್ tidyr ಮತ್ತು ಅದರ ಹೊಸ ಕಾರ್ಯಗಳು pivot_longer ಮತ್ತು pivot_wider

ಲೇಖನದಲ್ಲಿ ಪ್ರಸ್ತುತಪಡಿಸಲಾದ ಉದಾಹರಣೆಗಳನ್ನು ಚಲಾಯಿಸಲು, ನೀವು ಮೊದಲು ಅಗತ್ಯ ಪ್ಯಾಕೇಜುಗಳನ್ನು ಸಂಪರ್ಕಿಸಬೇಕು:

library(tidyr)
library(dplyr)
library(readr)

(ಇತರ ವಿಷಯಗಳ ಜೊತೆಗೆ) ಜನರನ್ನು ಅವರ ಧರ್ಮ ಮತ್ತು ವಾರ್ಷಿಕ ಆದಾಯದ ಕುರಿತು ಕೇಳಿದ ಸಮೀಕ್ಷೆಯ ಫಲಿತಾಂಶಗಳೊಂದಿಗೆ ನಾವು ಟೇಬಲ್ ಹೊಂದಿದ್ದೇವೆ ಎಂದು ಹೇಳೋಣ:

#> # A tibble: 18 x 11
#>    religion `<$10k` `$10-20k` `$20-30k` `$30-40k` `$40-50k` `$50-75k`
#>    <chr>      <dbl>     <dbl>     <dbl>     <dbl>     <dbl>     <dbl>
#>  1 Agnostic      27        34        60        81        76       137
#>  2 Atheist       12        27        37        52        35        70
#>  3 Buddhist      27        21        30        34        33        58
#>  4 Catholic     418       617       732       670       638      1116
#>  5 Don’t k…      15        14        15        11        10        35
#>  6 Evangel…     575       869      1064       982       881      1486
#>  7 Hindu          1         9         7         9        11        34
#>  8 Histori…     228       244       236       238       197       223
#>  9 Jehovah…      20        27        24        24        21        30
#> 10 Jewish        19        19        25        25        30        95
#> # … with 8 more rows, and 4 more variables: `$75-100k` <dbl>,
#> #   `$100-150k` <dbl>, `>150k` <dbl>, `Don't know/refused` <dbl>

ಈ ಕೋಷ್ಟಕವು ಪ್ರತಿಸ್ಪಂದಕರ ಧರ್ಮದ ಡೇಟಾವನ್ನು ಸಾಲುಗಳಲ್ಲಿ ಒಳಗೊಂಡಿದೆ ಮತ್ತು ಆದಾಯ ಮಟ್ಟಗಳು ಕಾಲಮ್ ಹೆಸರುಗಳಲ್ಲಿ ಹರಡಿಕೊಂಡಿವೆ. ಪ್ರತಿ ವರ್ಗದಿಂದ ಪ್ರತಿಕ್ರಿಯಿಸುವವರ ಸಂಖ್ಯೆಯನ್ನು ಧರ್ಮ ಮತ್ತು ಆದಾಯದ ಛೇದಕದಲ್ಲಿ ಸೆಲ್ ಮೌಲ್ಯಗಳಲ್ಲಿ ಸಂಗ್ರಹಿಸಲಾಗುತ್ತದೆ. ಟೇಬಲ್ ಅನ್ನು ಅಚ್ಚುಕಟ್ಟಾಗಿ, ಸರಿಯಾದ ಸ್ವರೂಪಕ್ಕೆ ತರಲು, ಅದನ್ನು ಬಳಸಲು ಸಾಕು pivot_longer():

pew %>% 
  pivot_longer(cols = -religion, names_to = "income", values_to = "count")

pew %>% 
  pivot_longer(cols = -religion, names_to = "income", values_to = "count")
#> # A tibble: 180 x 3
#>    religion income             count
#>    <chr>    <chr>              <dbl>
#>  1 Agnostic <$10k                 27
#>  2 Agnostic $10-20k               34
#>  3 Agnostic $20-30k               60
#>  4 Agnostic $30-40k               81
#>  5 Agnostic $40-50k               76
#>  6 Agnostic $50-75k              137
#>  7 Agnostic $75-100k             122
#>  8 Agnostic $100-150k            109
#>  9 Agnostic >150k                 84
#> 10 Agnostic Don't know/refused    96
#> # … with 170 more rows

ಕಾರ್ಯ ವಾದಗಳು pivot_longer()

  • ಮೊದಲ ವಾದ ಕೊರಳಪಟ್ಟಿಗಳು, ಯಾವ ಕಾಲಮ್‌ಗಳನ್ನು ವಿಲೀನಗೊಳಿಸಬೇಕು ಎಂಬುದನ್ನು ವಿವರಿಸುತ್ತದೆ. ಈ ಸಂದರ್ಭದಲ್ಲಿ, ಹೊರತುಪಡಿಸಿ ಎಲ್ಲಾ ಕಾಲಮ್ಗಳು ಸಮಯ.
  • ವಾದ ಹೆಸರುಗಳು_ಗೆ ನಾವು ಸಂಯೋಜಿಸಿದ ಕಾಲಮ್‌ಗಳ ಹೆಸರುಗಳಿಂದ ರಚಿಸಲಾಗುವ ವೇರಿಯೇಬಲ್‌ನ ಹೆಸರನ್ನು ನೀಡುತ್ತದೆ.
  • ಮೌಲ್ಯಗಳು_ಗೆ ವಿಲೀನಗೊಂಡ ಕಾಲಮ್‌ಗಳ ಕೋಶಗಳ ಮೌಲ್ಯಗಳಲ್ಲಿ ಸಂಗ್ರಹವಾಗಿರುವ ಡೇಟಾದಿಂದ ರಚಿಸಲಾದ ವೇರಿಯಬಲ್ ಹೆಸರನ್ನು ನೀಡುತ್ತದೆ.

ವಿಶೇಷಣಗಳು (ಸಂಪಾದಿಸಿ)

ಇದು ಪ್ಯಾಕೇಜ್‌ನ ಹೊಸ ಕ್ರಿಯಾತ್ಮಕತೆಯಾಗಿದೆ ಅಚ್ಚುಕಟ್ಟು, ಲೆಗಸಿ ಫಂಕ್ಷನ್‌ಗಳೊಂದಿಗೆ ಕೆಲಸ ಮಾಡುವಾಗ ಇದು ಹಿಂದೆ ಲಭ್ಯವಿರಲಿಲ್ಲ.

ವಿವರಣೆಯು ಡೇಟಾ ಫ್ರೇಮ್ ಆಗಿದೆ, ಅದರ ಪ್ರತಿ ಸಾಲು ಹೊಸ ಔಟ್‌ಪುಟ್ ದಿನಾಂಕ ಚೌಕಟ್ಟಿನಲ್ಲಿ ಒಂದು ಕಾಲಮ್‌ಗೆ ಅನುರೂಪವಾಗಿದೆ ಮತ್ತು ಇದರೊಂದಿಗೆ ಪ್ರಾರಂಭವಾಗುವ ಎರಡು ವಿಶೇಷ ಕಾಲಮ್‌ಗಳು:

  • .ಹೆಸರು ಮೂಲ ಕಾಲಮ್ ಹೆಸರನ್ನು ಒಳಗೊಂಡಿದೆ.
  • .ಮೌಲ್ಯ ಸೆಲ್ ಮೌಲ್ಯಗಳನ್ನು ಒಳಗೊಂಡಿರುವ ಕಾಲಮ್‌ನ ಹೆಸರನ್ನು ಒಳಗೊಂಡಿದೆ.

ವಿವರಣೆಯ ಉಳಿದ ಕಾಲಮ್‌ಗಳು ಹೊಸ ಕಾಲಮ್ ಹೇಗೆ ಸಂಕುಚಿತ ಕಾಲಮ್‌ಗಳ ಹೆಸರನ್ನು ಪ್ರದರ್ಶಿಸುತ್ತದೆ ಎಂಬುದನ್ನು ಪ್ರತಿಬಿಂಬಿಸುತ್ತದೆ .ಹೆಸರು.

ವಿವರಣೆಯು ಕಾಲಮ್ ಹೆಸರಿನಲ್ಲಿ ಸಂಗ್ರಹವಾಗಿರುವ ಮೆಟಾಡೇಟಾವನ್ನು ವಿವರಿಸುತ್ತದೆ, ಪ್ರತಿ ಕಾಲಮ್‌ಗೆ ಒಂದು ಸಾಲು ಮತ್ತು ಪ್ರತಿ ವೇರಿಯಬಲ್‌ಗೆ ಒಂದು ಕಾಲಮ್, ಕಾಲಮ್ ಹೆಸರಿನೊಂದಿಗೆ ಸಂಯೋಜಿಸಲ್ಪಟ್ಟಿದೆ, ಈ ವ್ಯಾಖ್ಯಾನವು ಈ ಕ್ಷಣದಲ್ಲಿ ಗೊಂದಲಮಯವಾಗಿ ಕಾಣಿಸಬಹುದು, ಆದರೆ ಕೆಲವು ಉದಾಹರಣೆಗಳನ್ನು ನೋಡಿದ ನಂತರ ಅದು ಹೆಚ್ಚು ಆಗುತ್ತದೆ. ಸ್ಪಷ್ಟ.

ಡೇಟಾಫ್ರೇಮ್ ಅನ್ನು ಪರಿವರ್ತಿಸಲು ನೀವು ಹೊಸ ಮೆಟಾಡೇಟಾವನ್ನು ಹಿಂಪಡೆಯಬಹುದು, ಮಾರ್ಪಡಿಸಬಹುದು ಮತ್ತು ವ್ಯಾಖ್ಯಾನಿಸಬಹುದು ಎಂಬುದು ವಿವರಣೆಯ ಅಂಶವಾಗಿದೆ.

ಟೇಬಲ್ ಅನ್ನು ವಿಶಾಲ ಸ್ವರೂಪದಿಂದ ದೀರ್ಘ ಸ್ವರೂಪಕ್ಕೆ ಪರಿವರ್ತಿಸುವಾಗ ವಿಶೇಷಣಗಳೊಂದಿಗೆ ಕೆಲಸ ಮಾಡಲು, ಕಾರ್ಯವನ್ನು ಬಳಸಿ pivot_longer_spec().

ಈ ಕಾರ್ಯವು ಹೇಗೆ ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತದೆ ಎಂದರೆ ಅದು ಯಾವುದೇ ದಿನಾಂಕ ಚೌಕಟ್ಟನ್ನು ತೆಗೆದುಕೊಳ್ಳುತ್ತದೆ ಮತ್ತು ಮೇಲೆ ವಿವರಿಸಿದ ರೀತಿಯಲ್ಲಿ ಅದರ ಮೆಟಾಡೇಟಾವನ್ನು ಉತ್ಪಾದಿಸುತ್ತದೆ.

ಉದಾಹರಣೆಯಾಗಿ, ಪ್ಯಾಕೇಜ್‌ನೊಂದಿಗೆ ಒದಗಿಸಲಾದ ಯಾರ ಡೇಟಾಸೆಟ್ ಅನ್ನು ತೆಗೆದುಕೊಳ್ಳೋಣ ಅಚ್ಚುಕಟ್ಟು. ಈ ಡೇಟಾಸೆಟ್ ಕ್ಷಯರೋಗದ ಘಟನೆಗಳ ಕುರಿತು ಅಂತರಾಷ್ಟ್ರೀಯ ಆರೋಗ್ಯ ಸಂಸ್ಥೆಯು ಒದಗಿಸಿದ ಮಾಹಿತಿಯನ್ನು ಒಳಗೊಂಡಿದೆ.

who
#> # A tibble: 7,240 x 60
#>    country iso2  iso3   year new_sp_m014 new_sp_m1524 new_sp_m2534
#>    <chr>   <chr> <chr> <int>       <int>        <int>        <int>
#>  1 Afghan… AF    AFG    1980          NA           NA           NA
#>  2 Afghan… AF    AFG    1981          NA           NA           NA
#>  3 Afghan… AF    AFG    1982          NA           NA           NA
#>  4 Afghan… AF    AFG    1983          NA           NA           NA
#>  5 Afghan… AF    AFG    1984          NA           NA           NA
#>  6 Afghan… AF    AFG    1985          NA           NA           NA
#>  7 Afghan… AF    AFG    1986          NA           NA           NA
#>  8 Afghan… AF    AFG    1987          NA           NA           NA
#>  9 Afghan… AF    AFG    1988          NA           NA           NA
#> 10 Afghan… AF    AFG    1989          NA           NA           NA
#> # … with 7,230 more rows, and 53 more variables

ಅದರ ವಿವರಣೆಯನ್ನು ನಿರ್ಮಿಸೋಣ.

spec <- who %>%
  pivot_longer_spec(new_sp_m014:newrel_f65, values_to = "count")

#> # A tibble: 56 x 3
#>    .name        .value name        
#>    <chr>        <chr>  <chr>       
#>  1 new_sp_m014  count  new_sp_m014 
#>  2 new_sp_m1524 count  new_sp_m1524
#>  3 new_sp_m2534 count  new_sp_m2534
#>  4 new_sp_m3544 count  new_sp_m3544
#>  5 new_sp_m4554 count  new_sp_m4554
#>  6 new_sp_m5564 count  new_sp_m5564
#>  7 new_sp_m65   count  new_sp_m65  
#>  8 new_sp_f014  count  new_sp_f014 
#>  9 new_sp_f1524 count  new_sp_f1524
#> 10 new_sp_f2534 count  new_sp_f2534
#> # … with 46 more rows

ಕ್ಷೇತ್ರಗಳು ದೇಶದ, isoxnumx, isoxnumx ಈಗಾಗಲೇ ಅಸ್ಥಿರಗಳಾಗಿವೆ. ಕಾಲಮ್‌ಗಳನ್ನು ಫ್ಲಿಪ್ ಮಾಡುವುದು ನಮ್ಮ ಕಾರ್ಯ new_sp_m014 ಮೇಲೆ newrel_f65.

ಈ ಕಾಲಮ್‌ಗಳ ಹೆಸರುಗಳು ಈ ಕೆಳಗಿನ ಮಾಹಿತಿಯನ್ನು ಸಂಗ್ರಹಿಸುತ್ತವೆ:

  • ಪೂರ್ವಪ್ರತ್ಯಯ new_ ಕಾಲಮ್ ಕ್ಷಯರೋಗದ ಹೊಸ ಪ್ರಕರಣಗಳ ಡೇಟಾವನ್ನು ಹೊಂದಿದೆ ಎಂದು ಸೂಚಿಸುತ್ತದೆ, ಪ್ರಸ್ತುತ ದಿನಾಂಕದ ಚೌಕಟ್ಟು ಹೊಸ ಕಾಯಿಲೆಗಳ ಮಾಹಿತಿಯನ್ನು ಮಾತ್ರ ಒಳಗೊಂಡಿದೆ, ಆದ್ದರಿಂದ ಪ್ರಸ್ತುತ ಸಂದರ್ಭದಲ್ಲಿ ಈ ಪೂರ್ವಪ್ರತ್ಯಯವು ಯಾವುದೇ ಅರ್ಥವನ್ನು ಹೊಂದಿಲ್ಲ.
  • sp/rel/sp/ep ರೋಗವನ್ನು ಪತ್ತೆಹಚ್ಚುವ ವಿಧಾನವನ್ನು ವಿವರಿಸುತ್ತದೆ.
  • m/f ರೋಗಿಯ ಲಿಂಗ.
  • 014/1524/2535/3544/4554/65 ರೋಗಿಯ ವಯಸ್ಸಿನ ಶ್ರೇಣಿ.

ಕಾರ್ಯವನ್ನು ಬಳಸಿಕೊಂಡು ನಾವು ಈ ಕಾಲಮ್‌ಗಳನ್ನು ವಿಭಜಿಸಬಹುದು extract()ನಿಯಮಿತ ಅಭಿವ್ಯಕ್ತಿ ಬಳಸಿ.

spec <- spec %>%
        extract(name, c("diagnosis", "gender", "age"), "new_?(.*)_(.)(.*)")

#> # A tibble: 56 x 5
#>    .name        .value diagnosis gender age  
#>    <chr>        <chr>  <chr>     <chr>  <chr>
#>  1 new_sp_m014  count  sp        m      014  
#>  2 new_sp_m1524 count  sp        m      1524 
#>  3 new_sp_m2534 count  sp        m      2534 
#>  4 new_sp_m3544 count  sp        m      3544 
#>  5 new_sp_m4554 count  sp        m      4554 
#>  6 new_sp_m5564 count  sp        m      5564 
#>  7 new_sp_m65   count  sp        m      65   
#>  8 new_sp_f014  count  sp        f      014  
#>  9 new_sp_f1524 count  sp        f      1524 
#> 10 new_sp_f2534 count  sp        f      2534 
#> # … with 46 more rows

ದಯವಿಟ್ಟು ಅಂಕಣವನ್ನು ಗಮನಿಸಿ .ಹೆಸರು ಮೂಲ ಡೇಟಾಸೆಟ್‌ನ ಕಾಲಮ್ ಹೆಸರುಗಳಲ್ಲಿ ಇದು ನಮ್ಮ ಸೂಚ್ಯಂಕವಾಗಿರುವುದರಿಂದ ಬದಲಾಗದೆ ಉಳಿಯಬೇಕು.

ಲಿಂಗ ಮತ್ತು ವಯಸ್ಸು (ಕಾಲಮ್‌ಗಳು ಲಿಂಗ и ವಯಸ್ಸು) ಸ್ಥಿರ ಮತ್ತು ತಿಳಿದಿರುವ ಮೌಲ್ಯಗಳನ್ನು ಹೊಂದಿದೆ, ಆದ್ದರಿಂದ ಈ ಕಾಲಮ್‌ಗಳನ್ನು ಅಂಶಗಳಿಗೆ ಪರಿವರ್ತಿಸಲು ಶಿಫಾರಸು ಮಾಡಲಾಗಿದೆ:

spec <-  spec %>%
            mutate(
              gender = factor(gender, levels = c("f", "m")),
              age = factor(age, levels = unique(age), ordered = TRUE)
            ) 

ಅಂತಿಮವಾಗಿ, ನಾವು ರಚಿಸಿದ ವಿವರಣೆಯನ್ನು ಮೂಲ ದಿನಾಂಕ ಚೌಕಟ್ಟಿಗೆ ಅನ್ವಯಿಸಲು ಯಾರು ನಾವು ವಾದವನ್ನು ಬಳಸಬೇಕಾಗಿದೆ ಸ್ಪೆಕ್ ಕಾರ್ಯದಲ್ಲಿ pivot_longer().

who %>% pivot_longer(spec = spec)

#> # A tibble: 405,440 x 8
#>    country     iso2  iso3   year diagnosis gender age   count
#>    <chr>       <chr> <chr> <int> <chr>     <fct>  <ord> <int>
#>  1 Afghanistan AF    AFG    1980 sp        m      014      NA
#>  2 Afghanistan AF    AFG    1980 sp        m      1524     NA
#>  3 Afghanistan AF    AFG    1980 sp        m      2534     NA
#>  4 Afghanistan AF    AFG    1980 sp        m      3544     NA
#>  5 Afghanistan AF    AFG    1980 sp        m      4554     NA
#>  6 Afghanistan AF    AFG    1980 sp        m      5564     NA
#>  7 Afghanistan AF    AFG    1980 sp        m      65       NA
#>  8 Afghanistan AF    AFG    1980 sp        f      014      NA
#>  9 Afghanistan AF    AFG    1980 sp        f      1524     NA
#> 10 Afghanistan AF    AFG    1980 sp        f      2534     NA
#> # … with 405,430 more rows

ನಾವು ಈಗ ಮಾಡಿದ ಎಲ್ಲವನ್ನೂ ಕ್ರಮಬದ್ಧವಾಗಿ ಈ ಕೆಳಗಿನಂತೆ ಚಿತ್ರಿಸಬಹುದು:

R ಪ್ಯಾಕೇಜ್ tidyr ಮತ್ತು ಅದರ ಹೊಸ ಕಾರ್ಯಗಳು pivot_longer ಮತ್ತು pivot_wider

ಬಹು ಮೌಲ್ಯಗಳನ್ನು ಬಳಸುವ ನಿರ್ದಿಷ್ಟತೆ (.ಮೌಲ್ಯ)

ಮೇಲಿನ ಉದಾಹರಣೆಯಲ್ಲಿ, ನಿರ್ದಿಷ್ಟ ಕಾಲಮ್ .ಮೌಲ್ಯ ಕೇವಲ ಒಂದು ಮೌಲ್ಯವನ್ನು ಒಳಗೊಂಡಿದೆ, ಹೆಚ್ಚಿನ ಸಂದರ್ಭಗಳಲ್ಲಿ ಇದು ಹೀಗಿರುತ್ತದೆ.

ಆದರೆ ಸಾಂದರ್ಭಿಕವಾಗಿ ನೀವು ಮೌಲ್ಯಗಳಲ್ಲಿ ವಿಭಿನ್ನ ಡೇಟಾ ಪ್ರಕಾರಗಳೊಂದಿಗೆ ಕಾಲಮ್‌ಗಳಿಂದ ಡೇಟಾವನ್ನು ಸಂಗ್ರಹಿಸಬೇಕಾದಾಗ ಪರಿಸ್ಥಿತಿ ಉದ್ಭವಿಸಬಹುದು. ಪರಂಪರೆಯ ಕಾರ್ಯವನ್ನು ಬಳಸುವುದು spread() ಇದನ್ನು ಮಾಡಲು ಸಾಕಷ್ಟು ಕಷ್ಟವಾಗುತ್ತದೆ.

ಕೆಳಗಿನ ಉದಾಹರಣೆಯನ್ನು ತೆಗೆದುಕೊಳ್ಳಲಾಗಿದೆ ವಿಗ್ನೆಟ್ಸ್ ಪ್ಯಾಕೇಜ್ಗೆ ಡೇಟಾ. ಟೇಬಲ್.

ತರಬೇತಿ ಡೇಟಾಫ್ರೇಮ್ ಅನ್ನು ರಚಿಸೋಣ.

family <- tibble::tribble(
  ~family,  ~dob_child1,  ~dob_child2, ~gender_child1, ~gender_child2,
       1L, "1998-11-26", "2000-01-29",             1L,             2L,
       2L, "1996-06-22",           NA,             2L,             NA,
       3L, "2002-07-11", "2004-04-05",             2L,             2L,
       4L, "2004-10-10", "2009-08-27",             1L,             1L,
       5L, "2000-12-05", "2005-02-28",             2L,             1L,
)
family <- family %>% mutate_at(vars(starts_with("dob")), parse_date)

#> # A tibble: 5 x 5
#>   family dob_child1 dob_child2 gender_child1 gender_child2
#>    <int> <date>     <date>             <int>         <int>
#> 1      1 1998-11-26 2000-01-29             1             2
#> 2      2 1996-06-22 NA                     2            NA
#> 3      3 2002-07-11 2004-04-05             2             2
#> 4      4 2004-10-10 2009-08-27             1             1
#> 5      5 2000-12-05 2005-02-28             2             1

ರಚಿಸಿದ ದಿನಾಂಕ ಚೌಕಟ್ಟು ಪ್ರತಿ ಸಾಲಿನಲ್ಲಿ ಒಂದು ಕುಟುಂಬದ ಮಕ್ಕಳ ಡೇಟಾವನ್ನು ಒಳಗೊಂಡಿದೆ. ಕುಟುಂಬಗಳು ಒಂದು ಅಥವಾ ಎರಡು ಮಕ್ಕಳನ್ನು ಹೊಂದಿರಬಹುದು. ಪ್ರತಿ ಮಗುವಿಗೆ, ಜನ್ಮ ದಿನಾಂಕ ಮತ್ತು ಲಿಂಗದ ಮೇಲೆ ಡೇಟಾವನ್ನು ಒದಗಿಸಲಾಗುತ್ತದೆ ಮತ್ತು ಪ್ರತಿ ಮಗುವಿನ ಡೇಟಾವು ಪ್ರತ್ಯೇಕ ಕಾಲಮ್‌ಗಳಲ್ಲಿದೆ; ವಿಶ್ಲೇಷಣೆಗಾಗಿ ಈ ಡೇಟಾವನ್ನು ಸರಿಯಾದ ಸ್ವರೂಪಕ್ಕೆ ತರುವುದು ನಮ್ಮ ಕಾರ್ಯವಾಗಿದೆ.

ಪ್ರತಿ ಮಗುವಿನ ಬಗ್ಗೆ ಮಾಹಿತಿಯೊಂದಿಗೆ ನಾವು ಎರಡು ಅಸ್ಥಿರಗಳನ್ನು ಹೊಂದಿದ್ದೇವೆ ಎಂಬುದನ್ನು ದಯವಿಟ್ಟು ಗಮನಿಸಿ: ಅವರ ಲಿಂಗ ಮತ್ತು ಹುಟ್ಟಿದ ದಿನಾಂಕ (ಪೂರ್ವಪ್ರತ್ಯಯದೊಂದಿಗೆ ಕಾಲಮ್‌ಗಳು ಡಾಪ್ ಹುಟ್ಟಿದ ದಿನಾಂಕ, ಪೂರ್ವಪ್ರತ್ಯಯದೊಂದಿಗೆ ಕಾಲಮ್‌ಗಳನ್ನು ಒಳಗೊಂಡಿರುತ್ತದೆ ಲಿಂಗ ಮಗುವಿನ ಲಿಂಗವನ್ನು ಒಳಗೊಂಡಿರುತ್ತದೆ). ನಿರೀಕ್ಷಿತ ಫಲಿತಾಂಶವೆಂದರೆ ಅವರು ಪ್ರತ್ಯೇಕ ಕಾಲಮ್‌ಗಳಲ್ಲಿ ಕಾಣಿಸಿಕೊಳ್ಳಬೇಕು. ಕಾಲಮ್ ಇರುವ ನಿರ್ದಿಷ್ಟತೆಯನ್ನು ರಚಿಸುವ ಮೂಲಕ ನಾವು ಇದನ್ನು ಮಾಡಬಹುದು .value ಎರಡು ವಿಭಿನ್ನ ಅರ್ಥಗಳನ್ನು ಹೊಂದಿರುತ್ತದೆ.

spec <- family %>%
  pivot_longer_spec(-family) %>%
  separate(col = name, into = c(".value", "child"))%>%
  mutate(child = parse_number(child))

#> # A tibble: 4 x 3
#>   .name         .value child
#>   <chr>         <chr>  <dbl>
#> 1 dob_child1    dob        1
#> 2 dob_child2    dob        2
#> 3 gender_child1 gender     1
#> 4 gender_child2 gender     2

ಆದ್ದರಿಂದ, ಮೇಲಿನ ಕೋಡ್‌ನಿಂದ ನಿರ್ವಹಿಸಲಾದ ಕ್ರಿಯೆಗಳನ್ನು ಹಂತ-ಹಂತವಾಗಿ ನೋಡೋಣ.

  • pivot_longer_spec(-family) - ಕುಟುಂಬದ ಕಾಲಮ್ ಹೊರತುಪಡಿಸಿ ಅಸ್ತಿತ್ವದಲ್ಲಿರುವ ಎಲ್ಲಾ ಕಾಲಮ್‌ಗಳನ್ನು ಸಂಕುಚಿತಗೊಳಿಸುವ ನಿರ್ದಿಷ್ಟತೆಯನ್ನು ರಚಿಸಿ.
  • separate(col = name, into = c(".value", "child")) - ಕಾಲಮ್ ಅನ್ನು ವಿಭಜಿಸಿ .ಹೆಸರು, ಇದು ಮೂಲ ಕ್ಷೇತ್ರಗಳ ಹೆಸರುಗಳನ್ನು ಒಳಗೊಂಡಿರುತ್ತದೆ, ಅಂಡರ್ಸ್ಕೋರ್ ಬಳಸಿ ಮತ್ತು ಫಲಿತಾಂಶದ ಮೌಲ್ಯಗಳನ್ನು ಕಾಲಮ್ಗಳಲ್ಲಿ ನಮೂದಿಸಿ .ಮೌಲ್ಯ и ಮಗು.
  • mutate(child = parse_number(child)) - ಕ್ಷೇತ್ರ ಮೌಲ್ಯಗಳನ್ನು ಪರಿವರ್ತಿಸಿ ಮಗು ಪಠ್ಯದಿಂದ ಸಂಖ್ಯಾ ಡೇಟಾ ಪ್ರಕಾರಕ್ಕೆ.

ಈಗ ನಾವು ಮೂಲ ಡೇಟಾಫ್ರೇಮ್ಗೆ ಪರಿಣಾಮವಾಗಿ ವಿವರಣೆಯನ್ನು ಅನ್ವಯಿಸಬಹುದು ಮತ್ತು ಟೇಬಲ್ ಅನ್ನು ಬಯಸಿದ ರೂಪಕ್ಕೆ ತರಬಹುದು.

family %>% 
    pivot_longer(spec = spec, na.rm = T)

#> # A tibble: 9 x 4
#>   family child dob        gender
#>    <int> <dbl> <date>      <int>
#> 1      1     1 1998-11-26      1
#> 2      1     2 2000-01-29      2
#> 3      2     1 1996-06-22      2
#> 4      3     1 2002-07-11      2
#> 5      3     2 2004-04-05      2
#> 6      4     1 2004-10-10      1
#> 7      4     2 2009-08-27      1
#> 8      5     1 2000-12-05      2
#> 9      5     2 2005-02-28      1

ನಾವು ವಾದವನ್ನು ಬಳಸುತ್ತೇವೆ na.rm = TRUE, ಏಕೆಂದರೆ ಡೇಟಾದ ಪ್ರಸ್ತುತ ರೂಪವು ಅಸ್ತಿತ್ವದಲ್ಲಿಲ್ಲದ ಅವಲೋಕನಗಳಿಗಾಗಿ ಹೆಚ್ಚುವರಿ ಸಾಲುಗಳ ರಚನೆಯನ್ನು ಒತ್ತಾಯಿಸುತ್ತದೆ. ಏಕೆಂದರೆ ಕುಟುಂಬ 2 ಕೇವಲ ಒಂದು ಮಗು, na.rm = TRUE ಕುಟುಂಬ 2 ಔಟ್‌ಪುಟ್‌ನಲ್ಲಿ ಒಂದು ಸಾಲನ್ನು ಹೊಂದಿರುತ್ತದೆ ಎಂದು ಖಾತರಿಪಡಿಸುತ್ತದೆ.

ದಿನಾಂಕ ಚೌಕಟ್ಟುಗಳನ್ನು ಉದ್ದದಿಂದ ವಿಶಾಲ ಸ್ವರೂಪಕ್ಕೆ ಪರಿವರ್ತಿಸಲಾಗುತ್ತಿದೆ

pivot_wider() - ಇದು ವಿಲೋಮ ರೂಪಾಂತರವಾಗಿದೆ, ಮತ್ತು ಪ್ರತಿಯಾಗಿ ಸಾಲುಗಳ ಸಂಖ್ಯೆಯನ್ನು ಕಡಿಮೆ ಮಾಡುವ ಮೂಲಕ ದಿನಾಂಕ ಚೌಕಟ್ಟಿನ ಕಾಲಮ್‌ಗಳ ಸಂಖ್ಯೆಯನ್ನು ಹೆಚ್ಚಿಸುತ್ತದೆ.

R ಪ್ಯಾಕೇಜ್ tidyr ಮತ್ತು ಅದರ ಹೊಸ ಕಾರ್ಯಗಳು pivot_longer ಮತ್ತು pivot_wider

ಡೇಟಾವನ್ನು ನಿಖರವಾದ ರೂಪಕ್ಕೆ ತರಲು ಈ ರೀತಿಯ ರೂಪಾಂತರವನ್ನು ಅತ್ಯಂತ ವಿರಳವಾಗಿ ಬಳಸಲಾಗುತ್ತದೆ, ಆದಾಗ್ಯೂ, ಪ್ರಸ್ತುತಿಗಳಲ್ಲಿ ಬಳಸುವ ಪಿವೋಟ್ ಕೋಷ್ಟಕಗಳನ್ನು ರಚಿಸಲು ಅಥವಾ ಕೆಲವು ಇತರ ಸಾಧನಗಳೊಂದಿಗೆ ಏಕೀಕರಣಕ್ಕಾಗಿ ಈ ತಂತ್ರವು ಉಪಯುಕ್ತವಾಗಿದೆ.

ವಾಸ್ತವವಾಗಿ ಕಾರ್ಯಗಳು pivot_longer() и pivot_wider() ಅವು ಸಮ್ಮಿತೀಯವಾಗಿರುತ್ತವೆ ಮತ್ತು ಪರಸ್ಪರ ವಿಲೋಮ ಕ್ರಿಯೆಗಳನ್ನು ಉಂಟುಮಾಡುತ್ತವೆ, ಅಂದರೆ: df %>% pivot_longer(spec = spec) %>% pivot_wider(spec = spec) и df %>% pivot_wider(spec = spec) %>% pivot_longer(spec = spec) ಮೂಲ df ಅನ್ನು ಹಿಂತಿರುಗಿಸುತ್ತದೆ.

ಟೇಬಲ್ ಅನ್ನು ವಿಶಾಲ ಸ್ವರೂಪಕ್ಕೆ ಪರಿವರ್ತಿಸುವ ಸರಳ ಉದಾಹರಣೆ

ಕಾರ್ಯವು ಹೇಗೆ ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತದೆ ಎಂಬುದನ್ನು ಪ್ರದರ್ಶಿಸಲು pivot_wider() ನಾವು ಡೇಟಾಸೆಟ್ ಅನ್ನು ಬಳಸುತ್ತೇವೆ ಮೀನು_ಎನ್ಕೌಂಟರ್ಗಳು, ನದಿಯ ಉದ್ದಕ್ಕೂ ಮೀನುಗಳ ಚಲನೆಯನ್ನು ವಿವಿಧ ನಿಲ್ದಾಣಗಳು ಹೇಗೆ ದಾಖಲಿಸುತ್ತವೆ ಎಂಬುದರ ಕುರಿತು ಮಾಹಿತಿಯನ್ನು ಸಂಗ್ರಹಿಸುತ್ತದೆ.

#> # A tibble: 114 x 3
#>    fish  station  seen
#>    <fct> <fct>   <int>
#>  1 4842  Release     1
#>  2 4842  I80_1       1
#>  3 4842  Lisbon      1
#>  4 4842  Rstr        1
#>  5 4842  Base_TD     1
#>  6 4842  BCE         1
#>  7 4842  BCW         1
#>  8 4842  BCE2        1
#>  9 4842  BCW2        1
#> 10 4842  MAE         1
#> # … with 104 more rows

ಹೆಚ್ಚಿನ ಸಂದರ್ಭಗಳಲ್ಲಿ, ನೀವು ಪ್ರತಿ ನಿಲ್ದಾಣದ ಮಾಹಿತಿಯನ್ನು ಪ್ರತ್ಯೇಕ ಕಾಲಮ್‌ನಲ್ಲಿ ಪ್ರಸ್ತುತಪಡಿಸಿದರೆ ಈ ಟೇಬಲ್ ಹೆಚ್ಚು ತಿಳಿವಳಿಕೆ ನೀಡುತ್ತದೆ ಮತ್ತು ಬಳಸಲು ಸುಲಭವಾಗುತ್ತದೆ.

fish_encounters %>% pivot_wider(names_from = station, values_from = seen)

fish_encounters %>% pivot_wider(names_from = station, values_from = seen)
#> # A tibble: 19 x 12
#>    fish  Release I80_1 Lisbon  Rstr Base_TD   BCE   BCW  BCE2  BCW2   MAE
#>    <fct>   <int> <int>  <int> <int>   <int> <int> <int> <int> <int> <int>
#>  1 4842        1     1      1     1       1     1     1     1     1     1
#>  2 4843        1     1      1     1       1     1     1     1     1     1
#>  3 4844        1     1      1     1       1     1     1     1     1     1
#>  4 4845        1     1      1     1       1    NA    NA    NA    NA    NA
#>  5 4847        1     1      1    NA      NA    NA    NA    NA    NA    NA
#>  6 4848        1     1      1     1      NA    NA    NA    NA    NA    NA
#>  7 4849        1     1     NA    NA      NA    NA    NA    NA    NA    NA
#>  8 4850        1     1     NA     1       1     1     1    NA    NA    NA
#>  9 4851        1     1     NA    NA      NA    NA    NA    NA    NA    NA
#> 10 4854        1     1     NA    NA      NA    NA    NA    NA    NA    NA
#> # … with 9 more rows, and 1 more variable: MAW <int>

ನಿಲ್ದಾಣದಿಂದ ಮೀನು ಪತ್ತೆಯಾದಾಗ ಮಾತ್ರ ಈ ಡೇಟಾ ಸೆಟ್ ಮಾಹಿತಿಯನ್ನು ದಾಖಲಿಸುತ್ತದೆ, ಅಂದರೆ. ಯಾವುದೇ ಮೀನುಗಳನ್ನು ಕೆಲವು ನಿಲ್ದಾಣಗಳು ರೆಕಾರ್ಡ್ ಮಾಡದಿದ್ದರೆ, ಈ ಡೇಟಾವು ಕೋಷ್ಟಕದಲ್ಲಿ ಇರುವುದಿಲ್ಲ. ಇದರರ್ಥ ಔಟ್ಪುಟ್ ಅನ್ನು NA ಯಿಂದ ತುಂಬಿಸಲಾಗುತ್ತದೆ.

ಆದಾಗ್ಯೂ, ಈ ಪ್ರಕರಣದಲ್ಲಿ ದಾಖಲೆ ಇಲ್ಲದಿರುವುದು ಮೀನು ನೋಡಿಲ್ಲ ಎಂದು ನಮಗೆ ತಿಳಿದಿದೆ, ಆದ್ದರಿಂದ ನಾವು ವಾದವನ್ನು ಬಳಸಬಹುದು ಮೌಲ್ಯಗಳು_ಭರ್ತಿ ಕಾರ್ಯದಲ್ಲಿ pivot_wider() ಮತ್ತು ಈ ಕಾಣೆಯಾದ ಮೌಲ್ಯಗಳನ್ನು ಸೊನ್ನೆಗಳೊಂದಿಗೆ ಭರ್ತಿ ಮಾಡಿ:

fish_encounters %>% pivot_wider(
  names_from = station, 
  values_from = seen,
  values_fill = list(seen = 0)
)

#> # A tibble: 19 x 12
#>    fish  Release I80_1 Lisbon  Rstr Base_TD   BCE   BCW  BCE2  BCW2   MAE
#>    <fct>   <int> <int>  <int> <int>   <int> <int> <int> <int> <int> <int>
#>  1 4842        1     1      1     1       1     1     1     1     1     1
#>  2 4843        1     1      1     1       1     1     1     1     1     1
#>  3 4844        1     1      1     1       1     1     1     1     1     1
#>  4 4845        1     1      1     1       1     0     0     0     0     0
#>  5 4847        1     1      1     0       0     0     0     0     0     0
#>  6 4848        1     1      1     1       0     0     0     0     0     0
#>  7 4849        1     1      0     0       0     0     0     0     0     0
#>  8 4850        1     1      0     1       1     1     1     0     0     0
#>  9 4851        1     1      0     0       0     0     0     0     0     0
#> 10 4854        1     1      0     0       0     0     0     0     0     0
#> # … with 9 more rows, and 1 more variable: MAW <int>

ಬಹು ಮೂಲ ವೇರಿಯಬಲ್‌ಗಳಿಂದ ಕಾಲಮ್ ಹೆಸರನ್ನು ರಚಿಸುವುದು

ಉತ್ಪನ್ನ, ದೇಶ ಮತ್ತು ವರ್ಷದ ಸಂಯೋಜನೆಯನ್ನು ಹೊಂದಿರುವ ಟೇಬಲ್ ಅನ್ನು ನಾವು ಹೊಂದಿದ್ದೇವೆ ಎಂದು ಊಹಿಸಿ. ಪರೀಕ್ಷಾ ದಿನಾಂಕದ ಚೌಕಟ್ಟನ್ನು ರಚಿಸಲು, ನೀವು ಈ ಕೆಳಗಿನ ಕೋಡ್ ಅನ್ನು ರನ್ ಮಾಡಬಹುದು:

df <- expand_grid(
  product = c("A", "B"), 
  country = c("AI", "EI"), 
  year = 2000:2014
) %>%
  filter((product == "A" & country == "AI") | product == "B") %>% 
  mutate(value = rnorm(nrow(.)))

#> # A tibble: 45 x 4
#>    product country  year    value
#>    <chr>   <chr>   <int>    <dbl>
#>  1 A       AI       2000 -2.05   
#>  2 A       AI       2001 -0.676  
#>  3 A       AI       2002  1.60   
#>  4 A       AI       2003 -0.353  
#>  5 A       AI       2004 -0.00530
#>  6 A       AI       2005  0.442  
#>  7 A       AI       2006 -0.610  
#>  8 A       AI       2007 -2.77   
#>  9 A       AI       2008  0.899  
#> 10 A       AI       2009 -0.106  
#> # … with 35 more rows

ಡೇಟಾ ಫ್ರೇಮ್ ಅನ್ನು ವಿಸ್ತರಿಸುವುದು ನಮ್ಮ ಕಾರ್ಯವಾಗಿದೆ, ಇದರಿಂದಾಗಿ ಒಂದು ಕಾಲಮ್ ಉತ್ಪನ್ನ ಮತ್ತು ದೇಶದ ಪ್ರತಿಯೊಂದು ಸಂಯೋಜನೆಗೆ ಡೇಟಾವನ್ನು ಹೊಂದಿರುತ್ತದೆ. ಇದನ್ನು ಮಾಡಲು, ಕೇವಲ ವಾದದಲ್ಲಿ ಹಾದುಹೋಗಿರಿ ಹೆಸರುಗಳು_ಇಂದ ವಿಲೀನಗೊಳ್ಳಬೇಕಾದ ಕ್ಷೇತ್ರಗಳ ಹೆಸರನ್ನು ಹೊಂದಿರುವ ವೆಕ್ಟರ್.

df %>% pivot_wider(names_from = c(product, country),
                 values_from = "value")

#> # A tibble: 15 x 4
#>     year     A_AI    B_AI    B_EI
#>    <int>    <dbl>   <dbl>   <dbl>
#>  1  2000 -2.05     0.607   1.20  
#>  2  2001 -0.676    1.65   -0.114 
#>  3  2002  1.60    -0.0245  0.501 
#>  4  2003 -0.353    1.30   -0.459 
#>  5  2004 -0.00530  0.921  -0.0589
#>  6  2005  0.442   -1.55    0.594 
#>  7  2006 -0.610    0.380  -1.28  
#>  8  2007 -2.77     0.830   0.637 
#>  9  2008  0.899    0.0175 -1.30  
#> 10  2009 -0.106   -0.195   1.03  
#> # … with 5 more rows

ನೀವು ಕಾರ್ಯಕ್ಕೆ ವಿಶೇಷಣಗಳನ್ನು ಸಹ ಅನ್ವಯಿಸಬಹುದು pivot_wider(). ಆದರೆ ಸಲ್ಲಿಸಿದಾಗ pivot_wider() ವಿವರಣೆಯು ವಿರುದ್ಧವಾದ ಪರಿವರ್ತನೆಯನ್ನು ಮಾಡುತ್ತದೆ pivot_longer(): ನಿರ್ದಿಷ್ಟಪಡಿಸಿದ ಕಾಲಮ್‌ಗಳು .ಹೆಸರು, ನಿಂದ ಮೌಲ್ಯಗಳನ್ನು ಬಳಸುವುದು .ಮೌಲ್ಯ ಮತ್ತು ಇತರ ಕಾಲಮ್‌ಗಳು.

ಈ ಡೇಟಾಸೆಟ್‌ಗಾಗಿ, ಡೇಟಾದಲ್ಲಿ ಇರುವಂತಹ ಪ್ರತಿಯೊಂದು ದೇಶ ಮತ್ತು ಉತ್ಪನ್ನ ಸಂಯೋಜನೆಯು ತನ್ನದೇ ಆದ ಕಾಲಮ್ ಅನ್ನು ಹೊಂದಲು ನೀವು ಬಯಸಿದರೆ ನೀವು ಕಸ್ಟಮ್ ವಿವರಣೆಯನ್ನು ರಚಿಸಬಹುದು:

spec <- df %>% 
  expand(product, country, .value = "value") %>% 
  unite(".name", product, country, remove = FALSE)

#> # A tibble: 4 x 4
#>   .name product country .value
#>   <chr> <chr>   <chr>   <chr> 
#> 1 A_AI  A       AI      value 
#> 2 A_EI  A       EI      value 
#> 3 B_AI  B       AI      value 
#> 4 B_EI  B       EI      value

df %>% pivot_wider(spec = spec) %>% head()

#> # A tibble: 6 x 5
#>    year     A_AI  A_EI    B_AI    B_EI
#>   <int>    <dbl> <dbl>   <dbl>   <dbl>
#> 1  2000 -2.05       NA  0.607   1.20  
#> 2  2001 -0.676      NA  1.65   -0.114 
#> 3  2002  1.60       NA -0.0245  0.501 
#> 4  2003 -0.353      NA  1.30   -0.459 
#> 5  2004 -0.00530    NA  0.921  -0.0589
#> 6  2005  0.442      NA -1.55    0.594

ಹೊಸ ಟೈಡರ್ ಪರಿಕಲ್ಪನೆಯೊಂದಿಗೆ ಕೆಲಸ ಮಾಡುವ ಹಲವಾರು ಮುಂದುವರಿದ ಉದಾಹರಣೆಗಳು

US ಸೆನ್ಸಸ್ ಆದಾಯ ಮತ್ತು ಬಾಡಿಗೆ ಡೇಟಾಸೆಟ್ ಅನ್ನು ಉದಾಹರಣೆಯಾಗಿ ಬಳಸಿಕೊಂಡು ಡೇಟಾವನ್ನು ಸ್ವಚ್ಛಗೊಳಿಸುವುದು.

ಡೇಟಾ ಸೆಟ್ ನಮಗೆ_ಬಾಡಿಗೆ_ಆದಾಯ 2017 ರಲ್ಲಿ US ನಲ್ಲಿನ ಪ್ರತಿ ರಾಜ್ಯಕ್ಕೆ ಸರಾಸರಿ ಆದಾಯ ಮತ್ತು ಬಾಡಿಗೆ ಮಾಹಿತಿಯನ್ನು ಒಳಗೊಂಡಿದೆ (ಪ್ಯಾಕೇಜ್‌ನಲ್ಲಿ ಡೇಟಾ ಸೆಟ್ ಲಭ್ಯವಿದೆ ಅಚ್ಚುಕಟ್ಟಾದ ಜನಗಣತಿ).

us_rent_income
#> # A tibble: 104 x 5
#>    GEOID NAME       variable estimate   moe
#>    <chr> <chr>      <chr>       <dbl> <dbl>
#>  1 01    Alabama    income      24476   136
#>  2 01    Alabama    rent          747     3
#>  3 02    Alaska     income      32940   508
#>  4 02    Alaska     rent         1200    13
#>  5 04    Arizona    income      27517   148
#>  6 04    Arizona    rent          972     4
#>  7 05    Arkansas   income      23789   165
#>  8 05    Arkansas   rent          709     5
#>  9 06    California income      29454   109
#> 10 06    California rent         1358     3
#> # … with 94 more rows

ಡೇಟಾಸೆಟ್‌ನಲ್ಲಿ ಡೇಟಾವನ್ನು ಸಂಗ್ರಹಿಸಲಾದ ರೂಪದಲ್ಲಿ ನಮಗೆ_ಬಾಡಿಗೆ_ಆದಾಯ ಅವರೊಂದಿಗೆ ಕೆಲಸ ಮಾಡುವುದು ಅತ್ಯಂತ ಅನಾನುಕೂಲವಾಗಿದೆ, ಆದ್ದರಿಂದ ನಾವು ಕಾಲಮ್‌ಗಳೊಂದಿಗೆ ಡೇಟಾ ಸೆಟ್ ಅನ್ನು ರಚಿಸಲು ಬಯಸುತ್ತೇವೆ: ಬಾಡಿಗೆ, ಬಾಡಿಗೆ_ಮೊ, ಬಂದು, ಆದಾಯ_ಮೋ. ಈ ವಿವರಣೆಯನ್ನು ರಚಿಸಲು ಹಲವು ಮಾರ್ಗಗಳಿವೆ, ಆದರೆ ಮುಖ್ಯ ಅಂಶವೆಂದರೆ ನಾವು ವೇರಿಯಬಲ್ ಮೌಲ್ಯಗಳ ಪ್ರತಿಯೊಂದು ಸಂಯೋಜನೆಯನ್ನು ರಚಿಸಬೇಕಾಗಿದೆ ಮತ್ತು ಅಂದಾಜು/ಮೊತದನಂತರ ಕಾಲಮ್ ಹೆಸರನ್ನು ರಚಿಸಿ.

  spec <- us_rent_income %>% 
    expand(variable, .value = c("estimate", "moe")) %>% 
    mutate(
      .name = paste0(variable, ifelse(.value == "moe", "_moe", ""))
    )

#> # A tibble: 4 x 3
#>   variable .value   .name     
#>   <chr>    <chr>    <chr>     
#> 1 income   estimate income    
#> 2 income   moe      income_moe
#> 3 rent     estimate rent      
#> 4 rent     moe      rent_moe

ಈ ವಿವರಣೆಯನ್ನು ಒದಗಿಸುವುದು pivot_wider() ನಾವು ಹುಡುಕುತ್ತಿರುವ ಫಲಿತಾಂಶವನ್ನು ನಮಗೆ ನೀಡುತ್ತದೆ:

us_rent_income %>% pivot_wider(spec = spec)

#> # A tibble: 52 x 6
#>    GEOID NAME                 income income_moe  rent rent_moe
#>    <chr> <chr>                 <dbl>      <dbl> <dbl>    <dbl>
#>  1 01    Alabama               24476        136   747        3
#>  2 02    Alaska                32940        508  1200       13
#>  3 04    Arizona               27517        148   972        4
#>  4 05    Arkansas              23789        165   709        5
#>  5 06    California            29454        109  1358        3
#>  6 08    Colorado              32401        109  1125        5
#>  7 09    Connecticut           35326        195  1123        5
#>  8 10    Delaware              31560        247  1076       10
#>  9 11    District of Columbia  43198        681  1424       17
#> 10 12    Florida               25952         70  1077        3
#> # … with 42 more rows

ವಿಶ್ವ ಬ್ಯಾಂಕ್

ಕೆಲವೊಮ್ಮೆ ಡೇಟಾ ಸೆಟ್ ಅನ್ನು ಬಯಸಿದ ರೂಪದಲ್ಲಿ ತರಲು ಹಲವಾರು ಹಂತಗಳ ಅಗತ್ಯವಿದೆ.
ಡೇಟಾಸೆಟ್ ವಿಶ್ವ_ಬ್ಯಾಂಕ್_ಪಾಪ್ 2000 ಮತ್ತು 2018 ರ ನಡುವಿನ ಪ್ರತಿ ದೇಶದ ಜನಸಂಖ್ಯೆಯ ಕುರಿತು ವಿಶ್ವ ಬ್ಯಾಂಕ್ ಡೇಟಾವನ್ನು ಒಳಗೊಂಡಿದೆ.

#> # A tibble: 1,056 x 20
#>    country indicator `2000` `2001` `2002` `2003`  `2004`  `2005`   `2006`
#>    <chr>   <chr>      <dbl>  <dbl>  <dbl>  <dbl>   <dbl>   <dbl>    <dbl>
#>  1 ABW     SP.URB.T… 4.24e4 4.30e4 4.37e4 4.42e4 4.47e+4 4.49e+4  4.49e+4
#>  2 ABW     SP.URB.G… 1.18e0 1.41e0 1.43e0 1.31e0 9.51e-1 4.91e-1 -1.78e-2
#>  3 ABW     SP.POP.T… 9.09e4 9.29e4 9.50e4 9.70e4 9.87e+4 1.00e+5  1.01e+5
#>  4 ABW     SP.POP.G… 2.06e0 2.23e0 2.23e0 2.11e0 1.76e+0 1.30e+0  7.98e-1
#>  5 AFG     SP.URB.T… 4.44e6 4.65e6 4.89e6 5.16e6 5.43e+6 5.69e+6  5.93e+6
#>  6 AFG     SP.URB.G… 3.91e0 4.66e0 5.13e0 5.23e0 5.12e+0 4.77e+0  4.12e+0
#>  7 AFG     SP.POP.T… 2.01e7 2.10e7 2.20e7 2.31e7 2.41e+7 2.51e+7  2.59e+7
#>  8 AFG     SP.POP.G… 3.49e0 4.25e0 4.72e0 4.82e0 4.47e+0 3.87e+0  3.23e+0
#>  9 AGO     SP.URB.T… 8.23e6 8.71e6 9.22e6 9.77e6 1.03e+7 1.09e+7  1.15e+7
#> 10 AGO     SP.URB.G… 5.44e0 5.59e0 5.70e0 5.76e0 5.75e+0 5.69e+0  4.92e+0
#> # … with 1,046 more rows, and 11 more variables: `2007` <dbl>,
#> #   `2008` <dbl>, `2009` <dbl>, `2010` <dbl>, `2011` <dbl>, `2012` <dbl>,
#> #   `2013` <dbl>, `2014` <dbl>, `2015` <dbl>, `2016` <dbl>, `2017` <dbl>

ಪ್ರತಿಯೊಂದು ವೇರಿಯಬಲ್‌ನೊಂದಿಗೆ ಅದರ ಸ್ವಂತ ಕಾಲಮ್‌ನಲ್ಲಿ ಅಚ್ಚುಕಟ್ಟಾಗಿ ಡೇಟಾ ಸೆಟ್ ಅನ್ನು ರಚಿಸುವುದು ನಮ್ಮ ಗುರಿಯಾಗಿದೆ. ಯಾವ ಹಂತಗಳು ಬೇಕಾಗುತ್ತವೆ ಎಂಬುದು ಸ್ಪಷ್ಟವಾಗಿಲ್ಲ, ಆದರೆ ನಾವು ಅತ್ಯಂತ ಸ್ಪಷ್ಟವಾದ ಸಮಸ್ಯೆಯೊಂದಿಗೆ ಪ್ರಾರಂಭಿಸುತ್ತೇವೆ: ವರ್ಷವು ಅನೇಕ ಕಾಲಮ್‌ಗಳಲ್ಲಿ ಹರಡಿದೆ.

ಇದನ್ನು ಸರಿಪಡಿಸಲು ನೀವು ಕಾರ್ಯವನ್ನು ಬಳಸಬೇಕಾಗುತ್ತದೆ pivot_longer().

pop2 <- world_bank_pop %>% 
  pivot_longer(`2000`:`2017`, names_to = "year")

#> # A tibble: 19,008 x 4
#>    country indicator   year  value
#>    <chr>   <chr>       <chr> <dbl>
#>  1 ABW     SP.URB.TOTL 2000  42444
#>  2 ABW     SP.URB.TOTL 2001  43048
#>  3 ABW     SP.URB.TOTL 2002  43670
#>  4 ABW     SP.URB.TOTL 2003  44246
#>  5 ABW     SP.URB.TOTL 2004  44669
#>  6 ABW     SP.URB.TOTL 2005  44889
#>  7 ABW     SP.URB.TOTL 2006  44881
#>  8 ABW     SP.URB.TOTL 2007  44686
#>  9 ABW     SP.URB.TOTL 2008  44375
#> 10 ABW     SP.URB.TOTL 2009  44052
#> # … with 18,998 more rows

ಮುಂದಿನ ಹಂತವು ಸೂಚಕ ವೇರಿಯಬಲ್ ಅನ್ನು ನೋಡುವುದು.
pop2 %>% count(indicator)

#> # A tibble: 4 x 2
#>   indicator       n
#>   <chr>       <int>
#> 1 SP.POP.GROW  4752
#> 2 SP.POP.TOTL  4752
#> 3 SP.URB.GROW  4752
#> 4 SP.URB.TOTL  4752

SP.POP.GROW ಎಂದರೆ ಜನಸಂಖ್ಯೆಯ ಬೆಳವಣಿಗೆ, SP.POP.TOTL ಒಟ್ಟು ಜನಸಂಖ್ಯೆ ಮತ್ತು SP.URB. * ಅದೇ ವಿಷಯ, ಆದರೆ ನಗರ ಪ್ರದೇಶಗಳಿಗೆ ಮಾತ್ರ. ಈ ಮೌಲ್ಯಗಳನ್ನು ಎರಡು ಅಸ್ಥಿರಗಳಾಗಿ ವಿಭಜಿಸೋಣ: ಪ್ರದೇಶ - ಪ್ರದೇಶ (ಒಟ್ಟು ಅಥವಾ ನಗರ) ಮತ್ತು ನಿಜವಾದ ಡೇಟಾವನ್ನು ಹೊಂದಿರುವ ವೇರಿಯಬಲ್ (ಜನಸಂಖ್ಯೆ ಅಥವಾ ಬೆಳವಣಿಗೆ):

pop3 <- pop2 %>% 
  separate(indicator, c(NA, "area", "variable"))

#> # A tibble: 19,008 x 5
#>    country area  variable year  value
#>    <chr>   <chr> <chr>    <chr> <dbl>
#>  1 ABW     URB   TOTL     2000  42444
#>  2 ABW     URB   TOTL     2001  43048
#>  3 ABW     URB   TOTL     2002  43670
#>  4 ABW     URB   TOTL     2003  44246
#>  5 ABW     URB   TOTL     2004  44669
#>  6 ABW     URB   TOTL     2005  44889
#>  7 ABW     URB   TOTL     2006  44881
#>  8 ABW     URB   TOTL     2007  44686
#>  9 ABW     URB   TOTL     2008  44375
#> 10 ABW     URB   TOTL     2009  44052
#> # … with 18,998 more rows

ಈಗ ನಾವು ಮಾಡಬೇಕಾಗಿರುವುದು ವೇರಿಯಬಲ್ ಅನ್ನು ಎರಡು ಕಾಲಮ್‌ಗಳಾಗಿ ವಿಭಜಿಸುವುದು:

pop3 %>% 
  pivot_wider(names_from = variable, values_from = value)

#> # A tibble: 9,504 x 5
#>    country area  year   TOTL    GROW
#>    <chr>   <chr> <chr> <dbl>   <dbl>
#>  1 ABW     URB   2000  42444  1.18  
#>  2 ABW     URB   2001  43048  1.41  
#>  3 ABW     URB   2002  43670  1.43  
#>  4 ABW     URB   2003  44246  1.31  
#>  5 ABW     URB   2004  44669  0.951 
#>  6 ABW     URB   2005  44889  0.491 
#>  7 ABW     URB   2006  44881 -0.0178
#>  8 ABW     URB   2007  44686 -0.435 
#>  9 ABW     URB   2008  44375 -0.698 
#> 10 ABW     URB   2009  44052 -0.731 
#> # … with 9,494 more rows

ಸಂಪರ್ಕ ಪಟ್ಟಿ

ಒಂದು ಕೊನೆಯ ಉದಾಹರಣೆ, ನೀವು ವೆಬ್‌ಸೈಟ್‌ನಿಂದ ನಕಲಿಸಿ ಮತ್ತು ಅಂಟಿಸಿದ ಸಂಪರ್ಕ ಪಟ್ಟಿಯನ್ನು ನೀವು ಹೊಂದಿದ್ದೀರಿ ಎಂದು ಊಹಿಸಿ:

contacts <- tribble(
  ~field, ~value,
  "name", "Jiena McLellan",
  "company", "Toyota", 
  "name", "John Smith", 
  "company", "google", 
  "email", "[email protected]",
  "name", "Huxley Ratcliffe"
)

ಈ ಪಟ್ಟಿಯನ್ನು ಪಟ್ಟಿ ಮಾಡುವುದು ತುಂಬಾ ಕಷ್ಟಕರವಾಗಿದೆ ಏಕೆಂದರೆ ಯಾವ ಡೇಟಾ ಯಾವ ಸಂಪರ್ಕಕ್ಕೆ ಸೇರಿದೆ ಎಂಬುದನ್ನು ಗುರುತಿಸುವ ಯಾವುದೇ ವೇರಿಯಬಲ್ ಇಲ್ಲ. ಪ್ರತಿಯೊಂದು ಹೊಸ ಸಂಪರ್ಕದ ಡೇಟಾವು "ಹೆಸರು" ನೊಂದಿಗೆ ಪ್ರಾರಂಭವಾಗುತ್ತದೆ ಎಂಬುದನ್ನು ಗಮನಿಸುವುದರ ಮೂಲಕ ನಾವು ಇದನ್ನು ಸರಿಪಡಿಸಬಹುದು, ಆದ್ದರಿಂದ ನಾವು ಅನನ್ಯ ಗುರುತಿಸುವಿಕೆಯನ್ನು ರಚಿಸಬಹುದು ಮತ್ತು ಕ್ಷೇತ್ರ ಕಾಲಮ್ "ಹೆಸರು" ಮೌಲ್ಯವನ್ನು ಹೊಂದಿರುವ ಪ್ರತಿ ಬಾರಿ ಅದನ್ನು ಒಂದರಿಂದ ಹೆಚ್ಚಿಸಬಹುದು:

contacts <- contacts %>% 
  mutate(
    person_id = cumsum(field == "name")
  )
contacts

#> # A tibble: 6 x 3
#>   field   value            person_id
#>   <chr>   <chr>                <int>
#> 1 name    Jiena McLellan           1
#> 2 company Toyota                   1
#> 3 name    John Smith               2
#> 4 company google                   2
#> 5 email   [email protected]          2
#> 6 name    Huxley Ratcliffe         3

ಈಗ ನಾವು ಪ್ರತಿ ಸಂಪರ್ಕಕ್ಕೆ ಅನನ್ಯ ID ಯನ್ನು ಹೊಂದಿದ್ದೇವೆ, ನಾವು ಕ್ಷೇತ್ರ ಮತ್ತು ಮೌಲ್ಯವನ್ನು ಕಾಲಮ್‌ಗಳಾಗಿ ಪರಿವರ್ತಿಸಬಹುದು:

contacts %>% 
  pivot_wider(names_from = field, values_from = value)

#> # A tibble: 3 x 4
#>   person_id name             company email          
#>       <int> <chr>            <chr>   <chr>          
#> 1         1 Jiena McLellan   Toyota  <NA>           
#> 2         2 John Smith       google  [email protected]
#> 3         3 Huxley Ratcliffe <NA>    <NA>

ತೀರ್ಮಾನಕ್ಕೆ

ಹೊಸ ಪರಿಕಲ್ಪನೆ ಎಂಬುದು ನನ್ನ ವೈಯಕ್ತಿಕ ಅಭಿಪ್ರಾಯ ಅಚ್ಚುಕಟ್ಟು ನಿಜವಾಗಿಯೂ ಹೆಚ್ಚು ಅರ್ಥಗರ್ಭಿತ, ಮತ್ತು ಲೆಗಸಿ ಕಾರ್ಯಗಳಿಗೆ ಕ್ರಿಯಾತ್ಮಕತೆಯಲ್ಲಿ ಗಮನಾರ್ಹವಾಗಿ ಉತ್ತಮವಾಗಿದೆ spread() и gather(). ಈ ಲೇಖನವು ನಿಮಗೆ ನಿಭಾಯಿಸಲು ಸಹಾಯ ಮಾಡಿದೆ ಎಂದು ನಾನು ಭಾವಿಸುತ್ತೇನೆ pivot_longer() и pivot_wider().

ಮೂಲ: www.habr.com

ಕಾಮೆಂಟ್ ಅನ್ನು ಸೇರಿಸಿ