9

Stata のinlistを使用すると、変数の実数値または文字列値を参照できます。そんな機能があるのか​​な?と思いRました。

例:

変数から 8 つの州を選択したいと考えています (これは、 50 個の文字列値 (米国の州) を取る任意のデータフレームstateの列と考えることができます)。statestate

    inlist(state,"NC","AZ","TX","NY","MA","CA","NJ")

変数から age の 9 つの値を選択したいと思います (これは、0 から 90 までの数値を取る任意のデータフレームageの列と考えることができます)。ageage

    inlist(age,16, 24, 45, 54, 67,74, 78, 79, 85) 

質問:

age<-c(0:10) # for this problem age takes values from 0 to 10 only
data<-as.data.frame(age) # age is a variable of data frame data
data$m<-ifelse(c(1,7,9)%in%data$age,0,1) # generate a variable m which takes  value 0 if age is 1, 7, and 8 and 1, otherwise
Expected output: 
   age m
1    0 1
2    1 0
3    2 1
4    3 1
5    4 1
6    5 1
7    6 1
8    7 0
9    8 1
10   9 0
11  10 1
4

1 に答える 1

8

私はあなたが欲しいと思います%in%

statevec <- c("NC","AZ","TX","NY","MA","CA","NJ")
state <- c("AZ","VT")
state %in% statevec ## TRUE FALSE
agevec <- c(16, 24, 45, 54, 67,74, 78, 79, 85) 
age <- c(34,45)
age %in% agevec ## FALSE TRUE

編集:更新された質問に取り組んでいます。

@NickCox のリンクからのコピー:

inlist(z,a,b,...)
      Domain:       all reals or all strings
      Range:        0 or 1
      Description:  returns 1 if z is a member of the remaining arguments;
                        otherwise, returns 0.  All arguments must be reals
                        or all must be strings.  The number of arguments is
                        between 2 and 255 for reals and between 2 and 10 for
                        strings.

ただし、これが元の質問とどのように一致するかはよくわかりません。私は Stata がベクトルであるかどうかを知るのに十分なほどよく知りzません。そのようには聞こえません。その場合、元の質問 (z=stateベクトルと見なす) は意味がありません。それがベクトルであると考えれば、答えはas.numeric(state %in% statevec)――だと思います。

編集:アナンダによる更新

更新されたデータを使用して、ここでも を使用して 1 つのアプローチを示し%in%ます。

data <- data.frame(age=0:10)
within(data, {
    m <- as.numeric(!age %in% c(1, 7, 9))
})
   age m
1    0 1
2    1 0
3    2 1
4    3 1
5    4 1
6    5 1
7    6 1
8    7 0
9    8 1
10   9 0
11  10 1

!これは、 (NOT) を使用して の意味を反転することにより、期待される出力と一致します%in%。私が考える方法(通常、0 = FALSE="リストにない"および1 = TRUE="リストにある")とStataの定義の私の読み方から少し後退しているようですが、それが何であるかあなたがしたい...

またはifelse、より潜在的な柔軟性 (つまり、0/1 以外の値) を使用することができます:within(data, { m <- ifelse(age %in% c(1, 7, 9),0,1)})上記のコードで置き換えます。

于 2013-01-12T16:30:25.573 に答える