質問
私は内容のデータフレームがあるとします:
Trial Person
1 John
2 John
3 John
4 John
1 Bill
2 Bill
3 Bill
4 Bill
と私はこれを変換したい。
Trial Person Day
1 John 1
2 John 1
3 John 2
4 John 2
1 Bill 1
2 Bill 1
3 Bill 2
4 Bill 2
私は非常に簡単に作ることができること
Trial Person Day
1 John TRUE
2 John TRUE
3 John FALSE
4 John FALSE
1 Bill TRUE
2 Bill TRUE
3 Bill FALSE
4 Bill FALSE
d$day=d$trial<3
を実行して、どのように私は私が欲しいものを得ることができますか?
解決
あなたが割り付けられた明示的な(と3のカットオフをハードコーディング)になりたい場合は、使用することができます。
d$Day <- ifelse(d$trial<3, 1, 2)
これは少しより透明です。あなたが発見したとしてそれ以外の場合は、演算を行うと、数値に論理値を変換します。あなたはas.numeric
またはas.integer
を使用してそれを自分で行うことができます:
as.integer(FALSE) #0
as.integer(TRUE) #1
他のヒント
データを取得します:
x <- read.table(textConnection(
"Trial Person
1 John
2 John
3 John
4 John
1 Bill
2 Bill
3 Bill
4 Bill"), header=TRUE)
私はあなたの現在のアプローチが正しいものであることを考える(注:この場合の加算を行う場合、それは自動的にキャストしていますので、あなたは、as.numeric必要はありません):
(x$Trial >= 3) + 1
それ以外の場合は、ここでplyrでそれを行う方法です。
library(plyr)
ddply(x, .(Person), transform, Day=rep(c(1,2), each=2))
あなたは一日あたり2回の試験を持っていたかのようにフォーム
c(1,2,3,4,5,6)
のベクトルは、c(1,1,2,2,3,3)
に変換しようとしている場合は、より一般的に、あなたは、この使用して整数の除算を表現したいかもしれません。
> x <- 1:6
> x
[1] 1 2 3 4 5 6
> (x-1) %/% 2 + 1
[1] 1 1 2 2 3 3
[OK]をので、私は私がしなければ、
、解決策を見つけました(d$trial>=3)+1
これは、整数にブール値に変換し、それが動作する...しかし、これを行うには良い方法はありますか?
所属していません StackOverflow