3

Rデータフレームでブール値がtrueになるかどうかを判断する新しい変数を作成する簡単な方法が必要です。以下に例を示します: データセットに 2 つの変数 (関連しない他の変数の中でも) があるとします。'a' と 'b' と 'a' はグループを決定します。または FALSE (0)。変数 'c​​' を作成します。これは、'b' が少なくとも一度は 'TRUE' であるグループ内のすべてのエントリに対して 1 であり、'b' が決して TRUE でないグループ内のすべてのエントリに対して 0 であるブール値でもあります。以下のようなエントリから:

a   b
-----
1   1 
2   0
1   0
1   0
1   1
2   0
2   0
3   0
3   1
3   0

以下のように変数「c」を取得したい:

a   b   c
-----------
1   1   1 
2   0   0
1   0   1
1   0   1
1   1   1
2   0   0
2   0   0
3   0   1
3   1   1
3   0   1
-----------

私は Stata でそれを行う方法を知っていますが、R で同様のことをまだ行ったことがなく、インターネットでその情報を見つけるのは困難です。実際、「c」が 0 であるすべての観測を後で削除するためだけにこれを行っているため、他の提案も同様に問題ありません。そのアプリケーションは、多項ロジット推定に関連しており、推定の前に選択されていない代替案をデータセットから削除する必要があります。

4

4 に答える 4

3

ベースRオプションは次のようになります

 df1$c <- with(df1, ave(b, a, FUN=any))

または

 library(sqldf)
 sqldf('select * from df1
      left join(select a, b,
         (sum(b))>0 as c
         from df1 
         group by a)
         using(a)')
于 2015-07-23T04:24:15.033 に答える
3

あなたXのデータフレームは

library(dplyr)
X <- X %>%
  group_by(a) %>%
  mutate(c = any(b == 1))
于 2015-07-23T02:01:37.507 に答える
1

データフレームにあると仮定aして、ベースRを使用した回答bx

cvalue は との 1 対 1 のマッピングでaあり、ここでマッピングを作成します

cmap <- ifelse(sapply(split(x, x$a), function(x) sum(x[, "b"])) > 0, 1, 0)

次に、マップされた値をデータフレームに追加するだけです

x$c <- cmap[x$a]

最終出力

> x
   a b c
1  1 1 1
2  2 0 0
3  1 0 1
4  1 0 1
5  1 1 1
6  2 0 0
7  2 0 0
8  3 0 1
9  3 1 1
10 3 0 1

スプリットへの呼び出しを変更するために編集されました。

于 2015-07-23T02:06:08.123 に答える