подсчет частоты столбца на основе двух других столбцов - PullRequest
0 голосов
/ 05 мая 2018

Я относительно новичок в r, и у меня возникла следующая проблема, надеюсь, вы мне поможете.

У меня есть таблица со столбцом RANDOM.s. Другой столбец показывает год. И третий столбец, который представляет некоторые значения или NA.

RANDOM <- sample(c("A","B","C","D"), size = 100, replace = TRUE)
Year <- sample(c(2008,2009,2010), 100, TRUE)
Value <- sample(c(0.22, NA), 100, TRUE)

Я ищу следующее решение:

       Year  2008 2009 2010 ...
Ticker
 A             9     11   7
 B             11    2    6
 C
 D

Я хочу получить такую ​​таблицу, например, которая возвращает мне, как часто значение в столбце «Значение» появлялось для «СЛУЧАЙНОГО» в 2008 году.

Пока что я мог получить только стол, который показал мне, как часто я получал матч СЛУЧАЙНО и Год, но не количество моей третьей колонки. Как это:

     Year 2008 2009 2010 ...  
 RANDOM
 A        4    5    6
 B
 C

Я был бы очень благодарен, если бы вы могли помочь мне в этом. Спасибо! :)

Ответы [ 2 ]

0 голосов
/ 05 мая 2018

Вы также можете использовать count без summarise; это создаст новую переменную с именем n

# some example data
df <- data_frame(
    Ticker = c(LETTERS[1:5],LETTERS[1:5]),
    y2008 = sample(1:3,10,replace = T),
    y2009 = sample(1:3,10,replace = T),
    y2010 = sample(1:3,10,replace = T)
)

df %>% 
    gather(key,value,-Ticker) %>% 
    group_by(Ticker,key,value) %>% 
    count()
0 голосов
/ 05 мая 2018

Вы на самом деле близки к решению. Я также хочу подчеркнуть, чтобы сначала проверить, как сделать хороший воспроизводимый пример (по крайней мере, для вашего следующего вопроса) -> Как сделать великолепный воспроизводимый пример R?

Вот пример того, как могут выглядеть ваши данные:

        # Make up some demo data

    Ticker <- sample(c("A","B","C","D"), size = 100, replace = TRUE)
    Year <- sample(c(2008,2009,2010), 100, TRUE)
    Value <- sample(c(0.22, NA), 100, TRUE)

    data <- data.frame(Ticker,Year,Value)

    # open dplyr library
    library(dplyr)

    #Group data by Ticker and year and count Values that are not NA 
    data %>% group_by(Ticker, Year) %>% summarise(count = length(Value[!is.na(Value)]))

   Ticker  Year count
   <fctr> <dbl> <int>
1       A  2008     9
2       A  2009    11
3       A  2010     7
4       B  2008    11
5       B  2009     2
6       B  2010     6
7       C  2008     7
8       C  2009    10
9       C  2010     9
10      D  2008     5
11      D  2009    12
12      D  2010    11
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...