функция для выдачи процента прочитанных файлов человеком в R - PullRequest
1 голос
/ 02 мая 2020

Я начал писать эту функцию:

owned.animal <- function(x){
  count.animals<- length(levels(x$animalsf))
  countowner<- 
  endcount <- tapply(countowner, junit20$animalsf, max)
  return(endcount)

}

Пока не работает, но мне нужна новая помощь.

Его целью является получение кадра данных с именами животных и владельцев, которые имели это животное. Должно быть указано, сколько процентов животных принадлежит человеку.

Example:

dog      max
dog      max
cat      tom
cat      max

output:
max      Tom
100      50

Правильно ли я думаю?

Ответы [ 2 ]

0 голосов
/ 02 мая 2020

С data.table мы можем сделать

library(data.table)
setDT(df)[, .(n = uniqueN(v1)/uniqueN(df$V1) * 100), V2]

Или с помощью base R

100 * rowMeans(table(df[2:1]) > 0)
# max tom 
#100  50 
0 голосов
/ 02 мая 2020

Вы можете сосчитать количество уникальных животных, которым владеет каждый человек, и разделить его на общее количество уникальных животных. Это можно сделать с помощью tapply как:

owned.animal <- function(df) {
  tapply(df[[1]], df[[2]], function(x) 
                  length(unique(x)))/length(unique(df[[1]])) * 100
}

owned.animal(df)
#max tom 
#100  50 

В dplyr вы можете посчитать количество уникальных значений с помощью n_distinct

library(dplyr)
df %>% group_by(V2) %>% summarise(n = n_distinct(V1)/n_distinct(df$V1) * 100) 

данных

df <- structure(list(V1 = c("dog", "dog", "cat", "cat"), V2 = c("max", 
"max", "tom", "max")), class = "data.frame", row.names = c(NA, -4L))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...