他の2つの変数のうちの1つの値に等しい新しい変数を作成したいと思います。ここに、偽のデータを持つおもちゃの例があります。2つの他の変数の1つの値に条件変数を代入する
データフレームの各行は学生を表します。各生徒は2科目(subj1
とsubj2
)まで勉強することができ、各科目で学位( "BA")または未成分( "MN")を取得することができます。私の実際のデータには、数千人の学生、数種類の学位、約50の科目が含まれています。学生は5つのメジャー/マイナーを持つことができます。
ID subj1 degree1 subj2 degree2
1 1 BUS BA <NA> <NA>
2 2 SCI BA ENG BA
3 3 BUS MN ENG BA
4 4 SCI MN BUS BA
5 5 ENG BA BUS MN
6 6 SCI MN <NA> <NA>
7 7 ENG MN SCI BA
8 8 BUS BA ENG MN
...
は、今私はsubj2
が一次長であればsubj1
は学生の主な主要な、またはsubj2
の値である場合subj1
の値に等しい第六変数、df$major
を作成したいです。主要なメジャーは学位が "BA"に等しい最初の科目です。私は、次のコードを試してみました:私はこの割り当ては、少なくともためにNAに評価された場合、ベクトル化割り当てが使用できないことを意味想定し
> df$major[df$degree1 == "BA"] = df$subj1
Error in df$major[df$degree1 == "BA"] = df$subj1 :
NAs are not allowed in subscripted assignments
:
df$major[df$degree1 == "BA"] = df$subj1
df$major[df$degree1 != "BA" & df$degree2 == "BA"] = df$subj2
は残念ながら、私は、エラーメッセージが表示されました1行
私はここで基本的なものを欠いているに違いないと思うが、上記のコードは明らかにそうであるように思え、私は別の方法を考え出すことができなかった。
それが答えを書くには参考になる場合は、ここでのサンプルデータはだ、dput()
を使用して作成し、上記の偽のデータと同じ形式で:
structure(list(ID = 1:20, subj1 = structure(c(3L, NA, 1L, 2L,
2L, 3L, 2L, 1L, 2L, 2L, 1L, 2L, 1L, 1L, 1L, 3L, 3L, 1L, 2L, 1L
), .Label = c("BUS", "ENG", "SCI"), class = "factor"), degree1 = structure(c(2L,
NA, 1L, 1L, 1L, 2L, 2L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L), .Label = c("BA", "MN"), class = "factor"), subj2 = structure(c(1L,
2L, NA, NA, 1L, NA, 3L, 2L, NA, 2L, 2L, 1L, 3L, NA, 2L, 1L, 1L,
NA, 2L, 2L), .Label = c("BUS", "ENG", "SCI"), class = "factor"),
degree2 = structure(c(2L, 2L, NA, NA, 2L, NA, 1L, 2L, NA,
2L, 1L, 1L, 2L, NA, 1L, 2L, 2L, NA, 1L, 2L), .Label = c("BA",
"MN"), class = "factor")), .Names = c("ID", "subj1", "degree1",
"subj2", "degree2"), row.names = c(NA, -20L), class = "data.frame")
degree1とdegree2両方がBAいる行があります。そのような場合、主要なコラムはどうあるべきですか? –
deg1 = "BA"の場合、subj1は主要メジャーです。 deg1!= "BA"&deg2 == "BA"の場合、subj2が主要メジャーです。私が抱えている問題の点では、プライマリメジャーを選択するための特定の条件は、この割り当て方法が失敗する理由ほど重要ではありません。 – eipi10