在R数据框中基于总计计算百分比的实现方法
Got it, let's walk through how to add that Percentage column to your data frame. The key is to first grab the total value (which sits in your last row), then calculate each row's value as a percentage of that total.
Step 1: Replicate Your Initial Data Frame
First, let's build the exact data frame you described:
# Create the original data frame df <- data.frame( Country = c(rep("UK", 6), "Total"), Information = c("Cars", "Sheep", "Cats", "Dogs", "Shoes", "Hats", ""), Value = c(50, 20, 15, 10, 3, 2, 100), stringsAsFactors = FALSE )
Step 2: Calculate the Percentage Column
I'll share two approaches here—one tailored to your specific setup where the total is in the last row, and a more robust option in case the total row ever moves:
Approach 1: Use the Last Row for Total
Since you confirmed the total is always the final row, this is straightforward:
# Extract total value from the last row total_value <- df$Value[nrow(df)] # Add the Percentage column df$Percentage <- (df$Value / total_value) * 100 # Optional: Round to 1 decimal place for cleaner output df$Percentage <- round(df$Percentage, 1)
Approach 2: Filter for the "Total" Row (More Robust)
If the total row might not always be last, this method is safer—it targets the row where Country is "Total":
# Extract total value by filtering the Country column total_value <- df$Value[df$Country == "Total"] # Calculate and format the Percentage column df$Percentage <- round((df$Value / total_value) * 100, 1)
Final Result
After running either approach, your data frame will look like this:
Country Information Value Percentage 1 UK Cars 50 50.0 2 UK Sheep 20 20.0 3 UK Cats 15 15.0 4 UK Dogs 10 10.0 5 UK Shoes 3 3.0 6 UK Hats 2 2.0 7 Total 100 100.0
This uses R's vectorized operations, so we avoid messy loops and keep the code efficient and easy to read.
内容的提问来源于stack exchange,提问作者Data Science

