Рассчитать и добавить значения во фрейм данных - PullRequest
0 голосов
/ 01 апреля 2019

Мой набор данных выглядит следующим образом:

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

Я хочу сделать круговую диаграмму, показывающую процент людей, у которых статус завершен, не завершен и не выполнен, то есть total no of users/user id = complete/incomplete

Этот код не работает.

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)

Ответы [ 2 ]

3 голосов
/ 01 апреля 2019

Если вы пытаетесь сделать круговую диаграмму, большинство методов сделают большую часть работы за вас. Нет необходимости явно рассчитывать проценты. В любом случае, вывод table - это именно то, что вы хотите вместе с 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

Как вы видите ниже, table подсчитывает количество появлений для каждого уровня и возвращает именованный вектор integer. Здесь хорошо то, что pie() вычисляет углы / области из относительных частот и использует имена для обозначения диаграммы.

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

Если вы настаиваете на подсчете процентов самостоятельно, вы можете просто использовать tab/sum(tab).

Редактировать: Я вижу, что вы пытаетесь использовать пакет highcharter . Почему бы не использовать hcpie в этом случае? Эта функция принимает коэффициент в качестве входных данных:

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

enter image description here

0 голосов
/ 01 апреля 2019

Как это:

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"))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...