-1

findinterval 関数の結果を目的の数値に置き換えるにはどうすればよいですか? 以下は dput() の出力です。

a=c(113,113,113,113,111,111,115,116,117,118,220,220)
b=c(113,113,113,113,111,111,115,116,117,118,220,220)
c=c(2,2,1,1,5,1,1,2,1,1,1,4)
d=c(2,2,12,12,15,12,12,2,12,12,12,14)
e=c(1,1,1,1,1,2,2,2,2,2,2,3)
f=c(20,30,25,35,45,55,60,65,70,75,75,80)
h=c("1A","1A","2A","3A","1A","5A","4A","4A","7A","7A","9A","9A")
i=c(12,16,17,19,20,15,18,17,17,13,14,15)

m=data.frame(a=a,b=b,c=c,d=d,e=e,f=f,h=h,i=i)

dput(m)
structure(list(a = c(113, 113, 113, 113, 111, 111, 115, 116, 
117, 118, 220, 220), b = c(113, 113, 113, 113, 111, 111, 115, 
116, 117, 118, 220, 220), c = c(2, 2, 1, 1, 5, 1, 1, 2, 1, 1, 
1, 4), d = c(2, 2, 12, 12, 15, 12, 12, 2, 12, 12, 12, 14), e = c(1, 
1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 3), f = c(20, 30, 25, 35, 45, 55, 
60, 65, 70, 75, 75, 80), h = structure(c(1L, 1L, 2L, 3L, 1L, 
5L, 4L, 4L, 6L, 6L, 7L, 7L), .Label = c("1A", "2A", "3A", "4A", 
"5A", "7A", "9A"), class = "factor"), i = c(12, 16, 17, 19, 20, 
15, 18, 17, 17, 13, 14, 15)), .Names = c("a", "b", "c", "d", 
"e", "f", "h", "i"), row.names = c(NA, -12L), class = "data.frame")

set.seed(5)
m$rand <- runif(nrow(m))

m[a==113,"i"] <- c(10,11,12)[1+findInterval(unlist(m[m$a==113,"rand",with=F]),c(0.25,0.50))]

これらすべての対応を1か所に持つ値ベクトルから簡単に描画する方法はありますか? たとえば、[for a==113 c(​​0.25,0.50),values=c(10,11,12)] [for a==111 c(0.25,0.50,0.75),values=c(1,2, 3,4)] [for a==115 c(0.25,0.50,0.75),values=c(1,2,3,4)] すべてが 1 つのテーブルまたはフレームにあり、findinterval 関数が使用されるたびにこれらから描画しますか? i 列は、関連する値に置き換えられることになっています。私がやりたいことは、別のファイルから値 (c(10,11,12) など) を読み取り、必要に応じて findinterval 関数に入れることです。

4

1 に答える 1

1

0と1は、によって返されるものfindIntervalです。その結果を使用して、関心のある値にインデックスを付ける必要があります。試してみてください。

> k[a==113,"WWW"] <- c(10,11)[1+findInterval(unlist(k[k$a==113,"rand",with=F]),c(0.45))]
 # or draw from the values vector based on your comment 
# (which should instead be an edit rather than a comment.
values=c(10,11,12)
k[a==113,"WWW"] <- values[1+findInterval(unlist(k[k$a==113,"rand",with=F]),c(0.45))]
> k
     a b  c d  e WWW      rand
1: 113 2  2 1 20  10 0.2002145
2: 113 2  2 1 30  11 0.6852186
3: 112 1 12 1 25  17 0.9168758
4: 114 1 12 1 35  19 0.2843995

ベクトルはゼロベースではなく1ベースであるため、結果に1を追加する必要があります。

于 2012-12-12T23:43:17.160 に答える