akr
akr

Reputation: 1

Calculate and add values to a data-frame

My dataset looks like this:

"userid","progress"
1, incomplete
2, complete
3, not attempted
4, incomplete
5, not attempted
6, complete
7, complete
8, complete
9, complete
10, incomplete

I want to make a pie chart showing the percentage of people who have status-completed, incomplete and not attempted, that is total no of users/user id = complete/incomplete

This code is not working.

var1 = nrow(data1)/sum(data1$progress=="complete")
var2 = nrow(data1)/sum(data1$progress=="incomplete")

  df <- data.frame(
    val = c (var1, var2)

  )

  hchart(df, "pie")%>%hc_add_series_labels_values(values = df)

Upvotes: 0

Views: 82

Answers (2)

Anders Ellern Bilgrau
Anders Ellern Bilgrau

Reputation: 10223

If you are trying to make a pie chart, most methods will do much of the work for you. No need to explicitly calculate the percentages. Anyway, the output of table is exactly what you want together with pie

# Load your data
ds <- read.csv(header = TRUE, text = 
"userid,progress
1, incomplete
2, complete
3, not attempted
4, incomplete
5, not attempted
6, complete
7, complete
8, complete
9, complete
10, incomplete")

# Tabularize
tab <- table(ds$progress)
pie(tab) # Make piechart

enter image description here

As you see below, table counts the number of appearances for each level and returns a named integer vector. The nice thing here is that pie() computes the angles/areas from the relative frequencies and uses the names to label the chart.

print(tab)
#
#      complete     incomplete  not attempted 
#             5              3              2 

If you insist on computing the percentages yourself, you can just use tab/sum(tab).

Edit: I see that you try to use the highcharter package. Why not use hcpie in that case? That function takes a factor as input:

library("highcharter")
hcpie(ds$progress)

enter image description here

Upvotes: 3

Oka
Oka

Reputation: 1328

Like this:

userid <- c(1,2,3,4,5,6,7,8,9,10)
progress <- c("incomplete","complete", "not attempted", "incomplete", "not attempted", "complete","complete","complete", "complete","incomplete")
df <- data.frame("userid"=userid, "progress"=progress)
df$progress <- as.factor(df$progress)
var1 = nrow(df[which(df$progress=="complete"), ])/nrow(df)
var2 = nrow(df[which(df$progress=="incomplete"), ])/nrow(df) 
var3 = nrow(df[which(df$progress=="not attempted"), ])/nrow(df) 
data <- c(var1, var2, var3)
pie(data, labels=c("complete","incomplete", "not attempted"))

Upvotes: 0

Related Questions