0

ここにいくつかのサンプルデータがあります。

vv  var1    var2
1   a   1/1/2010
1   c   1/3/2010
2   d   1/6/2010
3   a   1/8/2010
3   c   1/9/2010
4   a   1/10/2010
4   b   1/11/2010
5   d   1/13/2010
6   a   1/16/2010
6   b   1/17/2010
7   a   1/19/2010
7   b   1/20/2010
8   d   1/22/2010
9   a   1/25/2010
9   c   1/27/2010

他の変数からの応答によって設定された新しい変数を作成しようとしています。これは簡単だと思いました。たとえば、以下のようなことを試しました。

data$new1[data$var1=="a"]<-data$var2
#or
data$new1[data$var1=="b" | data$var1=="c"]<-data$var2

エラーが発生しますnumber of items to replace is not of replacement length。私のデータでは、すべてvar1=="a"var2値を持っているわけではないので、r が欠損値に NA を割り当てるだけではない理由がわかりません。new1基本的に、 r にNA 値を指定してもらいたいvar1!="a".

私も試しました

if (data$var1=="a") {data$new1<-data$var2} else {data$new1<-"NA"}

しかし、エラーが発生しますthe condition has length > 1 and only the first element will be used

ここで、データをサブセット化しvar1=="a"、値を割り当ててから、NA の代入を取得するオプションを使用してメイン データ セットにマージすることができると思いall=Tますが、これは本当に避けたいと思います。

何が問題なのかよくわかりません。アドバイスをいただければ幸いです。乾杯。

コードを実行するための以下のメソッドからの出力:

data$new1 <- ifelse(data$var1 %in% c("b","c"),data$var2,NA)

       vv var1      var2 new1
    1   1    a  1/1/2010   NA
    2   1    c  1/3/2010   12
    3   2    d  1/6/2010   NA
    4   3    a  1/8/2010   NA
    5   3    c  1/9/2010   15
    6   4    a 1/10/2010   NA
    7   4    b 1/11/2010    3
    8   5    d 1/13/2010   NA
    9   6    a 1/16/2010   NA
    10  6    b 1/17/2010    6
    11  7    a 1/19/2010   NA
    12  7    b 1/20/2010    8
    13  8    d 1/22/2010   NA
    14  9    a 1/25/2010   NA
    15  9    c 1/27/2010   11
4

2 に答える 2

1

私の理解が正しければ、次のタスクを使用ifelseして実行したいと思います。%in%

data$new1 <- ifelse(data$var1 %in% c("A","B"),data$var2,NA)

あなたが実行したのはサブセット化です。これはしばしば小さいものを返すため、警告が表示されます。

于 2013-03-11T16:56:03.037 に答える
1

サンプルデータを提供していないため、このコードはテストされていません

data$new1 <- rep(NA, nrow(data))
data$new1[data$var1=="A"] <- data$var2[data$var1=="A"]

data$var1=="A"ここで重要なのは、 との両方data$new1に同じサブセット パラメータ ( ) を持つことdata$var2です。

この方法の利点は、サブセット化が単なる等価性ではなく、任意の論理式である必要があることです。

于 2013-03-11T16:55:51.007 に答える