Using R for Social Science Research: From Data Import to Publication-Ready Tables
Dr. Thomas Jefferson
Data Science Instructor
Introduction
R is a free, open-source programming language increasingly used in social science research. Unlike SPSS's point-and-click interface, R requires writing code—but offers greater flexibility and transparency. This guide covers the essentials for social scientists new to R.
What is R?
Getting Started
Installation
- Download R from r-project.org
- Download RStudio (a user-friendly interface for R) from posit.co
RStudio makes R much more accessible than the base R interface.
Basic R Interface
Console: Where you type commands and see output
Script: Where you write and save code (best practice)
Environment: Shows variables and data you've loaded
Files/Plots: Shows your working directory, plots you've created
Basic R Concepts
Variables and Assignment
age <- 25 # Store the value 25 in a variable called "age"
print(age) # Display the value
The <- operator assigns values to variables.
Data Types
# Numeric
income <- 50000
# Character (text)
name <- "Sarah"
# Logical (TRUE/FALSE)
employed <- TRUE
# Vector (collection of values)
test_scores <- c(85, 92, 78, 88)
Functions
Functions are commands that do something. Basic structure:
function_name(argument1, argument2)
Example:
mean(c(85, 92, 78)) # Calculate mean of these three values
sd(test_scores) # Calculate standard deviation
Loading and Exploring Data
Importing Data
# From CSV file
data <- read.csv("mydata.csv")
# From Excel (requires readxl package)
library(readxl)
data <- read_excel("mydata.xlsx")
Exploring Your Data
# View first few rows
head(data)
# Get basic information
str(data) # Structure
summary(data) # Summary statistics
# Dimensions
dim(data) # Number of rows and columns
Best Practice
Descriptive Statistics
Basic Calculations
mean(data$variable) # Average
median(data$variable) # Middle value
sd(data$variable) # Standard deviation
Creating Frequency Tables
table(data$gender) # Count of each category
# More detailed
library(dplyr)
data %>%
group_by(gender) %>%
summarize(n = n(),
mean_age = mean(age),
sd_age = sd(age))
Cleaning and Preparing Data
Handling Missing Values
# Check for missing values
is.na(data$age) # Returns TRUE/FALSE
# Remove missing values
data_clean <- na.omit(data)
# Or keep only complete cases for specific variables
data_clean <- data[complete.cases(data$age, data$income), ]
Recoding Variables
# Recode gender (1=Male, 2=Female)
data$gender <- recode(data$gender,
'1' = 'Male',
'2' = 'Female')
Creating New Variables
# Create age groups
data$age_group <- cut(data$age,
breaks = c(0, 25, 35, 50, 100),
labels = c("18-25", "26-35", "36-50", "50+"))
Statistical Tests
Descriptive Statistics Table
library(psych)
describe(data[c("age", "income", "education")])
Correlation Analysis
# Pearson correlation
cor.test(data$anxiety, data$test_score)
# Correlation matrix
cor(data[c("anxiety", "depression", "stress")])
T-Test
# Compare two groups
t.test(test_score ~ gender, data = data)
Interpretation: Look for p-value < .05 for statistical significance.
ANOVA (3+ groups)
# Compare across teaching methods
aov_model <- aov(test_score ~ teaching_method, data = data)
summary(aov_model)
Chi-Square Test (categorical)
# Test association between two categorical variables
chisq.test(data$gender, data$major)
Creating Publication-Ready Tables
Using {gt} Package
library(gt)
# Summary table
summary_table <- data %>%
group_by(condition) %>%
summarize(
N = n(),
Mean_Score = mean(test_score),
SD_Score = sd(test_score),
Mean_Age = mean(age)
) %>%
gt() %>%
fmt_number(columns = c(Mean_Score, SD_Score, Mean_Age),
decimals = 2)
# Display in document
summary_table
Using {stargazer} Package
library(stargazer)
# Create regression table
stargazer(model1, model2,
type = "text",
summary = TRUE)
Data Visualization
Basic Plots with ggplot2
library(ggplot2)
# Scatter plot
ggplot(data, aes(x = anxiety, y = test_score)) +
geom_point() +
geom_smooth(method = "lm") +
labs(title = "Anxiety and Test Performance",
x = "Anxiety Level",
y = "Test Score")
# Boxplot comparing groups
ggplot(data, aes(x = teaching_method, y = test_score)) +
geom_boxplot() +
theme_minimal()
# Histogram
ggplot(data, aes(x = age)) +
geom_histogram(binwidth = 5) +
facet_wrap(~gender)
Regression Analysis
Simple Linear Regression
# Model: predict test_score from anxiety
model <- lm(test_score ~ anxiety, data = data)
summary(model)
Output shows:
- Coefficients (how much test_score changes per unit of anxiety)
- R-squared (how much variance is explained)
- P-values (statistical significance)
Multiple Regression
# Multiple predictors
model <- lm(test_score ~ anxiety + age + gender, data = data)
summary(model)
Reporting Results
# Extract key statistics for reporting
coefficients(model)
confint(model) # Confidence intervals
Analysis Workflow
- Load data and explore
- Clean data (missing values, outliers)
- Run descriptive statistics
- Check assumptions (normality, etc.)
- Run main analysis (t-test, ANOVA, regression)
- Create visualizations
- Create publication-ready table
- Write up results
Common Mistakes
- Not checking assumptions – Different tests have different assumptions (normality, homogeneity of variance, etc.)
- Ignoring missing data – Missing values can bias results
- Not visualizing data – A plot often reveals patterns numbers hide
- Confusing
<-and=– Use<-for assignment in R - Not saving your code – Always work in scripts, not just the console
Pro Tip
Resources
- Free R Tutorials: DataCamp, Coursera, YouTube
- R Documentation: Type
?function_namein R console - R Communities: Stack Overflow, Reddit's r/rstats
- Useful Books: "R for Data Science" by Hadley Wickham & Garrett Grolemund
Conclusion
R has a learning curve, but offers powerful tools for social science research. Start with simple descriptive statistics, build to more complex analyses, and don't hesitate to ask for help. The R community is remarkably supportive.
The investment in learning R pays off through greater transparency, reproducibility, and flexibility in your research.
Next Steps
Need help with R analysis? EssayBoffin's data science tutors can guide you from basics to advanced statistical modeling. Get R programming support
Need academic writing support?
EssayBoffin provides expert editing, writing assistance, and research support for all academic levels.
Get Support