質問

私は内容のデータフレームがあるとします:

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

これは、整数にブール値に変換し、それが動作する...しかし、これを行うには良い方法はありますか?

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top