2016-11-14 10 views
3

私は正の値と負の値の総数をidで与えて、おそらくdplyrを使用する2つの変数を作成します。結果のデータセットは以下のようになりますグループごとに列の正の負の値を数えます

library(dplyr)  
set.seed(42) 
    df <- data.frame (id=rep(1:10,each=10), 
         ff=rnorm(100, 0,14)) 
> head(df,20) 
    id   ff 
1 1 19.1934183 
2 1 -7.9057744 
3 1 5.0837978 
4 1 8.8600765 
5 1 5.6597565 
6 1 -1.4857432 
7 1 21.1613080 
8 1 -1.3252265 
9 1 28.2579320 
10 1 -0.8779974 
11 2 18.2681752 
12 2 32.0130355 
13 2 -19.4440498 
14 2 -3.9030427 
15 2 -1.8664987 
16 2 8.9033056 
17 2 -3.9795409 
18 2 -37.1903759 
19 2 -34.1665370 
20 2 18.4815868 

例データ

> head(df,20) 
    id   ff pos neg 
1 1 19.1934183 6 4 
2 1 -7.9057744 6 4 
3 1 5.0837978 6 4 
4 1 8.8600765 6 4 
5 1 5.6597565 6 4 
6 1 -1.4857432 6 4 
7 1 21.1613080 6 4 
8 1 -1.3252265 6 4 
9 1 28.2579320 6 4 
10 1 -0.8779974 6 4 
11 2 18.2681752 4 6 
12 2 32.0130355 4 6 
13 2 -19.4440498 4 6 
14 2 -3.9030427 4 6 
15 2 -1.8664987 4 6 
16 2 8.9033056 4 6 
17 2 -3.9795409 4 6 
18 2 -37.1903759 4 6 
19 2 -34.1665370 4 6 
20 2 18.4815868 4 6 

私はこれに似た何かがうまくいくと思っています

df<-df%>% group_by(id) %>% mutate(pos= nrow(ff>0)) %>% ungroup() 

すべてのヘルプは素晴らしいことです、ありがとう。

答えて

2

あなたはsum()必要があります。また、使用することができ楽しい(そして速い)ソリューションdata.tableについては

df %>% group_by(id) %>% 
    mutate(pos = sum(ff>0), 
     neg = sum(ff<0)) 
+0

ID内のいずれかの値が負の値であれば1、そうでない場合は0になるという第3の変数(0/1)を作成する方法を知っていますか? group_by文の中にifelseのようなものがありますか? – user63230

+1

@ user63230おそらく 'group_by(id)%> mutate(neg = ifelse(id <0,1,0))'の行に沿った何か? – Megatron

+0

@Megatronありがとう、正確ではないが、私はそれを働いた。ただ単に "any"を欲しかったので、コードは 'df <-df %>%group_by(id)%>%mutate(neg = ifelse(任意の(ff <0)、1,0) – user63230

1

:ここ
require(data.table) 
setDT(df)  
df[, ":=" (pos = sum(ff > 0), neg = sum(ff < 0)), by = id] 
1

は、あなたの質問の ifelse一部を追加答えます
df <- df %>% group_by(id) %>% 
    mutate(pos = sum(ff>0), neg = sum(ff<0)) %>% 
    group_by(id) %>% 
    mutate(any_neg=ifelse(any(ff < 0), 1, 0)) 

出力:

> head(df, 20) 
Source: local data frame [20 x 5] 
Groups: id [2] 

     id   ff pos neg any_neg 
    <int>  <dbl> <int> <int> <dbl> 
1  1 19.1934183  6  4  1 
2  1 -7.9057744  6  4  1 
3  1 5.0837978  6  4  1 
4  1 8.8600765  6  4  1 
5  1 5.6597565  6  4  1 
6  1 -1.4857432  6  4  1 
7  1 21.1613080  6  4  1 
8  1 -1.3252265  6  4  1 
9  1 28.2579320  6  4  1 
10  1 -0.8779974  6  4  1 
11  2 18.2681752  4  6  1 
12  2 32.0130355  4  6  1 
13  2 -19.4440498  4  6  1 
14  2 -3.9030427  4  6  1 
15  2 -1.8664987  4  6  1 
16  2 8.9033056  4  6  1 
17  2 -3.9795409  4  6  1 
18  2 -37.1903759  4  6  1 
19  2 -34.1665370  4  6  1 
20  2 18.4815868  4  6  1 
関連する問題