基于另外两列

时间:2018-05-05 16:01:44

标签: dataframe

我对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

我想得到一个这样的表格,例如让我回来,列中的价值多久和#34;价值&#34;出现在&#34; RANDOM&#34;在2008年。

到目前为止,我只能得到一张表格,告诉我我多久得一次比赛 RANDOM和Year,但不是我的第三列。像这样:

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

如果你能帮我解决这个问题,我将非常感激。 谢谢! :)

2 个答案:

答案 0 :(得分:0)

您实际上接近解决方案。我还想强调首先看看如何制作一个好的可重复的例子(至少对你的下一个问题) - &gt; How to make a great R reproducible example?

以下是一个如何查找数据的示例:

        # 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

答案 1 :(得分:0)

您也可以使用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()