2017-02-22 6 views
1

dcast(ライブラリーreshape2またはdata.table)を使用すると、fillに乱数を入力する方法があるのだろうかと思います。例:Rサンプルに

ID H1 H2 H3 
1 AA 1.3 NA 2.5 
2 BB 1.4 3.7 NA 
3 CC 9.5 7.4 7.1 
4 DD NA 1.8 8.4 

は、私は、ランダムな数字とそれらの欠損値のそれぞれを埋めるしたいと思います:値の一部が失われるか、単純なdcast

dfdc <- dcast(data=example, ID~Replica, value.var = 'Value', fill = sample(1:10, 1)) 

通知を行う

ID = c('AA', 'AA', 'BB', 'BB', 'CC', 'CC', 'CC', 'DD', 'DD') 
Replica = c('H1','H3','H1','H2','H1','H2','H3','H2','H3') 
Value = c(1.3, 2.5, 1.4, 3.7, 9.5, 7.4, 7.1, 1.8, 8.4) 

example <- data.frame(ID=ID, Replica = Replica, Value = Value) 

、次のようなもの:

dfdc <- dcast(data=example, ID~Replica, value.var = 'Value', fill = sample(1:10, 1)) 
結果として得られる

ID H1 H2 H3 
1 AA 1.3 2.0 2.5 
2 BB 1.4 3.7 2.0 
3 CC 9.5 7.4 7.1 
4 DD 2.0 1.8 8.4 

しかしながら、全ての欠損値は、同じ乱数(この場合は2)によって置き換えられています。

欠損値ごとに個別に機能を適用することができるため、欠損値に異なる乱数を埋め込むことはできますか?

ありがとうございます!

答えて

3

警告に気付かない場合は、fill = sample(10)とするだけで、未使用の値は削除されます。あなたはまだ3つの乱数を受け取ります。サンプルが予想される数字のNAよりも高いかどうか確かめてください。

dcast(example, ID ~ Replica, fill = sample(10)) 
# ID H1 H2 H3 
# 1 AA 1.3 4.0 2.5 
# 2 BB 1.4 3.7 1.0 
# 3 CC 9.5 7.4 7.1 
# 4 DD 10.0 1.8 8.4 
# Warning message: 
# In ordered[is.na(ordered)] <- fill : 
# number of items to replace is not a multiple of replacement length 

もちろん、suppressWarnings()でラップすることもできます。ここで

suppressWarnings(dcast(example, ID ~ Replica, fill = sample(10))) 
# ID H1 H2 H3 
# 1 AA 1.3 6.0 2.5 
# 2 BB 1.4 3.7 5.0 
# 3 CC 9.5 7.4 7.1 
# 4 DD 9.0 1.8 8.4 
3

tidyverse

library(tidyverse) 
complete(example, ID, Replica) %>% 
    mutate(Value = coalesce(Value, as.numeric(sample(1:10, n(), replace=TRUE)))) %>%  
    spread(Replica, Value) 
# A tibble: 4 × 4 
#  ID H1 H2 H3 
#* <fctr> <dbl> <dbl> <dbl> 
#1  AA 1.3 2.0 2.5 
#2  BB 1.4 3.7 1.0 
#3  CC 9.5 7.4 7.1 
#4  DD 8.0 1.8 8.4 
を使用してオプションです。
関連する問題