2017-09-20 6 views
0

単一データフレームから複数の条件に一致するRに新しい変数を作成する方法。次のデータセットから新しい変数(couple_smokr)を作成します。カップル関連の変数はデータセットにはなく、既存の変数から作成する必要があります(カップルは男性と女性のクラスタ、houseno、partnernumが似ています)。いずれかがこの(couple_smoke)変数を作成するコマンドを持っている場合、それは理解されるでしょう。新しい変数フォームを作成する方法r複数の列と行condtion in r

View(afgan) 
sex cluster  houseno  partnernum smoke **couple_smoke** 
male  1   4    2   yes   yes 
female 1   4    2   yes   yes 
male  1   4    1   no   no 
male  3   10   1   no   no 
female 3   10   1   yes   no 
female 4   4    2   no   no 
female 4   4    1   no   no 
male  4   4    3   no   no 
+1

ようこそ!あなたのデータを再現性を持たせるために、あなたは(ヘッド(afgan)頭)を打ち出して結果を掲示できますか? – csgroen

+0

4行目と5行目の* male *と* female *にタグが付いていないのはなぜですか?* * – Parfait

答えて

1

私はカップルが同じ世帯に住んでいるし、それらの両方が喫煙するとき、彼らはまたclusterhouseno、およびpartnernumからsmoke変数asidesに同じ入力を持つべきであるように、あなたは、couple_smokeを定義することを推測しています。私は正しいですか?

afgan <- structure(list(
    sex = structure(c(2L, 1L, 2L, 2L, 1L, 1L, 1L, 2L), 
        .Label = c("female", "male"), class = "factor"), 
    cluster= c(1, 1, 1, 3, 3, 4, 4, 4), 
    houseno= c(4, 4, 4, 10, 10, 4, 4, 4), 
    partnernum= c(2, 2, 1, 1, 1, 2, 1, 3), 
    smoke = structure(c(1L, 1L, 2L, 2L, 1L, 2L, 2L, 2L), 
    .Label = c("yes", "no"), class = "factor")), 
    .Names = c("sex", "cluster", "houseno", "partnernum", "smoke"), 
    row.names = c(NA, 8L), class = "data.frame") 
そして

library(tidyverse) 
library(magrittr) 
afgan %<>% 
    group_by(cluster, houseno, partnernum, smoke) %>% 
    mutate(couple_smoke = ifelse(n() > 1, 1, 0)) 

nは最初の入力データ(及びcsgroenが指摘したように次回dputコードを提供してください)()関数:次に、トリックを行う必要があり、以下の

dplyrパッケージの各グループの行数が計算されます。

0

基底Rのave()を考えてみましょう。nrow()と等しい1のベクトルを加算して合計します。

df$couple_smoke <- ifelse(ave(rep(1, nrow(df)), df$cluster, df$houseno, 
          df$partnernum, df$smoke, FUN=sum) > 1, 'yes', 'no') 
関連する問題