Last updated: 2020-05-24
Checks: 6 1
Knit directory: R-codes/
This reproducible R Markdown analysis was created with workflowr (version 1.6.2). The Checks tab describes the reproducibility checks that were applied when the results were created. The Past versions tab lists the development history.
The R Markdown file has unstaged changes. To know which version of the R Markdown file created these results, you’ll want to first commit it to the Git repo. If you’re still working on the analysis, you can ignore this warning. When you’re finished, you can run wflow_publish
to commit the R Markdown file and build the HTML.
Great job! The global environment was empty. Objects defined in the global environment can affect the analysis in your R Markdown file in unknown ways. For reproduciblity it’s best to always run the code in an empty environment.
The command set.seed(20200515)
was run prior to running the code in the R Markdown file. Setting a seed ensures that any results that rely on randomness, e.g. subsampling or permutations, are reproducible.
Great job! Recording the operating system, R version, and package versions is critical for reproducibility.
Nice! There were no cached chunks for this analysis, so you can be confident that you successfully produced the results during this run.
Great job! Using relative paths to the files within your workflowr project makes it easier to run your code on other machines.
Great! You are using Git for version control. Tracking code development and connecting the code version to the results is critical for reproducibility.
The results in this page were generated with repository version cd2754d. See the Past versions tab to see a history of the changes made to the R Markdown and HTML files.
Note that you need to be careful to ensure that all relevant files for the analysis have been committed to Git prior to generating the results (you can use wflow_publish
or wflow_git_commit
). workflowr only checks the R Markdown file, but you know if there are other scripts or data files that it depends on. Below is the status of the Git repository when the results were generated:
Ignored files:
Ignored: .RData
Ignored: .Rhistory
Ignored: .Rproj.user/
Unstaged changes:
Modified: analysis/data_manipulation.Rmd
Note that any generated files, e.g. HTML, png, CSS, etc., are not included in this status report because it is ok for generated content to have uncommitted changes.
These are the previous versions of the repository in which changes were made to the R Markdown (analysis/data_manipulation.Rmd
) and HTML (docs/data_manipulation.html
) files. If you’ve configured a remote Git repository (see ?wflow_git_remote
), click on the hyperlinks in the table below to view the files as they were in that past version.
File | Version | Author | Date | Message |
---|---|---|---|---|
Rmd | cd2754d | KaranSShakya | 2020-05-23 | web scrapping - base_r |
html | cd2754d | KaranSShakya | 2020-05-23 | web scrapping - base_r |
Rmd | 9c630f2 | KaranSShakya | 2020-05-23 | download online file |
html | 9c630f2 | KaranSShakya | 2020-05-23 | download online file |
html | e1a5784 | KaranSShakya | 2020-05-19 | link on all pages |
html | 9097ee4 | KaranSShakya | 2020-05-19 | aes erros SOLVED + links |
Rmd | 1a7c01c | KaranSShakya | 2020-05-19 | bug commit |
Rmd | 6c2aa83 | KaranSShakya | 2020-05-17 | data manipulation updates |
html | 6c2aa83 | KaranSShakya | 2020-05-17 | data manipulation updates |
Rmd | 5adafbc | KaranSShakya | 2020-05-16 | panel regression + numeric/character |
html | 5adafbc | KaranSShakya | 2020-05-16 | panel regression + numeric/character |
Rmd | d927485 | KaranSShakya | 2020-05-16 | GIT to R-Studio commits |
html | d927485 | KaranSShakya | 2020-05-16 | GIT to R-Studio commits |
To use data readily online. You need the readr package which reads csv files.
url <- "https://raw.githubusercontent.com/rafalab/dslabs/master/inst/extdata/murders.csv"
dat <- read_csv(url)
To download the file we can use: (or an alternative is to simply write.excel or write.csv).
download.file(url, tmp_filename)
If there isnt a csv/excel file to download, we can still access the data online and convert it into a dataframe. This is done from the rvest package, but is inbuilt in tidyverse. First, save the url page into an object in R url.
url <- "https://en.wikipedia.org/wiki/Murder_in_the_United_States_by_state"
h <- read_html(url)
If the HTML pages are divided into tables, you can extract it:
tab <- h %>%
html_nodes("table")
tab <- tab[[2]] #selecting the second node: which has the data.
tab <- tab %>%
html_table #finally a data with columns and rows
Set up coloumns names (makes sure it aligns with the data):
tab <- tab %>%
setNames(c("state", "population", "total", "murders", "gun_murders", "gun_ownership", "total_rate", "murder_rate", "gun_murder_rate"))
tab.data <- data.frame(tab) #data frame you can work with
Sometimes important data are only in the form of a PDF. We can still use R to extract data from this. This is the test pdf page we use - link. We need the package pdftools.
temp_file <- tempfile() #code to create a unique name.
url <- "http://www.pnas.org/content/suppl/2015/09/16/1510159112.DCSupplemental/pnas.201510159SI.pdf" #url from which to download the table
download.file(url, temp_file) #downloading the file and giving it a temp name
txt <- pdf_text(temp_file) #converting the url into text value in R
file.remove(temp_file)
Now we look closely into the txt file to isolate our table. It is all about finding a pattern to isolate from.
raw.data <- txt[2] #our table was in the 2nd text.
raw.data1 <- str_split(raw.data, "\n") #each line in the table was seperated by "\n"
raw.data2 <- raw.data1[[1]] #isolating the section we need
table.1 <- raw.data2[3]
table.2 <- raw.data2[4]
Focusing on table.1 (column names)
table.1 <- table.1 %>%
str_trim() %>%
str_replace_all(",\\s.", "") %>%
str_split("\\s{2,}", simplify = TRUE)
table.1 #we have the column names
[,1] [,2] [,3]
[1,] "Applications" "Awards" "Success rates"
Focusing on table.2 (more columns)
table.2 <- table.2 %>%
str_trim() %>%
str_split("\\s+", simplify = TRUE)
table.2
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9]
[1,] "Discipline" "Total" "Men" "Women" "Total" "Men" "Women" "Total" "Men"
[,10]
[1,] "Women"
We can combine both these to form a column for our data:
tmp_names <- str_c(rep(table.1, each = 3), table.2[-1], sep = "_")
the_names <- c(table.2[1], tmp_names) %>%
str_to_lower() %>%
str_replace_all("\\s", "_")
the_names
[1] "discipline" "applications_total" "applications_men"
[4] "applications_women" "awards_total" "awards_men"
[7] "awards_women" "success_rates_total" "success_rates_men"
[10] "success_rates_women"
Finally combining all this with the data:
new_research_funding_rates <- raw.data2[6:14] %>%
str_trim %>%
str_split("\\s{2,}", simplify = TRUE) %>%
data.frame(stringsAsFactors = FALSE) %>%
setNames(the_names) %>%
mutate_at(-1, parse_number) #this is a new data.frame!
Creating example data frame. Columns with commas are always chracter.
comma <- data.frame(c("1,233", "1,000,000"), c(1233, 1000000))
names(comma) <- c("Incorrect", "Correct")
comma
Incorrect Correct
1 1,233 1233
2 1,000,000 1000000
parse_number is a direct function that deals with commas. There are more parse functions.
comma$Incorrect <- parse_number(comma$Incorrect)
comma
Incorrect Correct
1 1233 1233
2 1000000 1000000
If x is character and y is numeric, and you want to reverse both these:
y <- as.numeric(x)
x <- as.character(y)
This is mainly used to change WorldBank datasets. Example table:
# A tibble: 3 x 4
Country `2001` `2002` `2003`
<chr> <dbl> <dbl> <dbl>
1 Nepal 12 435 5524
2 India 31 355 2424
3 China 64 353 2244
key The columns to turn into rows. value what to call the data.
long <- wide %>%
gather(key="Year", value="Population", 2:4)
long
# A tibble: 9 x 3
Country Year Population
<chr> <chr> <dbl>
1 Nepal 2001 12
2 India 2001 31
3 China 2001 64
4 Nepal 2002 435
5 India 2002 355
6 China 2002 353
7 Nepal 2003 5524
8 India 2003 2424
9 China 2003 2244
names(data)[1] <- "New_name"
sum(is.na(tab.data$murders))
sessionInfo()
R version 4.0.0 (2020-04-24)
Platform: x86_64-apple-darwin17.0 (64-bit)
Running under: macOS Catalina 10.15.4
Matrix products: default
BLAS: /Library/Frameworks/R.framework/Versions/4.0/Resources/lib/libRblas.dylib
LAPACK: /Library/Frameworks/R.framework/Versions/4.0/Resources/lib/libRlapack.dylib
locale:
[1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] pdftools_2.3.1 rvest_0.3.5 xml2_1.3.2 readxl_1.3.1
[5] forcats_0.5.0 stringr_1.4.0 dplyr_0.8.5 purrr_0.3.4
[9] readr_1.3.1 tidyr_1.0.3 tibble_3.0.1 ggplot2_3.3.0
[13] tidyverse_1.3.0 workflowr_1.6.2
loaded via a namespace (and not attached):
[1] Rcpp_1.0.4.6 lubridate_1.7.8 lattice_0.20-41 assertthat_0.2.1
[5] rprojroot_1.3-2 digest_0.6.25 utf8_1.1.4 R6_2.4.1
[9] cellranger_1.1.0 backports_1.1.6 reprex_0.3.0 evaluate_0.14
[13] httr_1.4.1 pillar_1.4.4 rlang_0.4.6 curl_4.3
[17] rstudioapi_0.11 whisker_0.4 rmarkdown_2.1 qpdf_1.1
[21] selectr_0.4-2 munsell_0.5.0 broom_0.5.6 compiler_4.0.0
[25] httpuv_1.5.2 modelr_0.1.7 xfun_0.13 pkgconfig_2.0.3
[29] askpass_1.1 htmltools_0.4.0 tidyselect_1.1.0 fansi_0.4.1
[33] crayon_1.3.4 dbplyr_1.4.3 withr_2.2.0 later_1.0.0
[37] grid_4.0.0 nlme_3.1-147 jsonlite_1.6.1 gtable_0.3.0
[41] lifecycle_0.2.0 DBI_1.1.0 git2r_0.27.1 magrittr_1.5
[45] scales_1.1.1 cli_2.0.2 stringi_1.4.6 fs_1.4.1
[49] promises_1.1.0 ellipsis_0.3.0 generics_0.0.2 vctrs_0.3.0
[53] tools_4.0.0 glue_1.4.1 hms_0.5.3 yaml_2.2.1
[57] colorspace_1.4-1 knitr_1.28 haven_2.2.0