0

一見単純な R タスクに困惑してしまいました… ここに示すように、data.frame に Number フィールドと TrueFalse フィールドがあります。

#Make Data
TrueFalse <- rep(c("TRUE","TRUE", "FALSE"),10)
Number <- seq(1, length(TrueFalse),3)
Table <- as.data.frame(cbind(TrueFalse, Number))

を見てhead()

head(Table)

TrueFalse フィールドが TRUE の場合、Numbers 列の値を含む新しい列を作成しようとしています。メタコードで:

各行について、TrueFalse = True の場合は NewField ==Number、それ以外の場合は何もない (つまり、NA のままにする)

私の作業コードは以下のとおりです。検索は生産的でしたが、まだいくつかの手順がありません。助けてくれてありがとう!

#for() loop using if()
NewField <- rep("NA", nrow(Table))
for (i in 1:nrow(NewField)){
    if(Table$TrueFalse[i] == "TRUE")
        {NewField[i] <- Table$Number[i]}
    }
4

2 に答える 2

2

これを 1 行で実行できます。例えば:

Table$NewField <- ifelse(Table$TrueFalse=="TRUE",Table$Number,-1)

また、"TRUE" と "FALSE" の代わりにTRUEandを使用した場合は、同等性テストも使用する必要はありません。FALSE

于 2013-10-26T05:29:22.840 に答える
2

cbindまず、データ フレームに変換する前に列を変更したくありません。cbind結果をすべての列と互換性のあるデータ型に強制するため、この場合、Number変数を文字に変換します。おそらくあなたが望んでいるものではないでしょう。

次に、R には論理データ型があるため、それを使用する必要があります。特に、「TRUE」と「FALSE」という値がある場合。

したがって:

TrueFalse <- rep(c(TRUE, TRUE, FALSE),10)
Table <- data.frame(TrueFalse, Number)

Table$NewField <- ifelse(Table$TrueFalse, Table$Number, -1)
于 2013-10-26T05:32:32.797 に答える