Customer id Year a b
1 2000 10 2
1 2001 5 3
1 2002 NA 4
1 2003 NA 5
2 2000 2 NA
2 2001 NA 4
2 2002 4 NA
2 2003 8 10
3 2000 9 NA
3 2001 10 NA
3 2002 11 12
1
A
答えて
3
あなたは次の操作を行うことができます:
require(dplyr)
impute_median <- function(x){
ind_na <- is.na(x)
x[ind_na] <- median(x[!ind_na])
as.numeric(x)
}
dat %>%
group_by(Customer_id) %>%
mutate_at(vars(a, b), impute_median)
+0
ここで' dplyr'と 'magrittr'の実装が気に入っていますが、これを実行すると正しい中央値が返されていないようです。 –
+0
心配しないで、私はその質問を誤解しました。 –
0
data.table
ソリューション:
dat[, `:=` (a= ifelse(is.na(a), median(a, na.rm=TRUE), a)
b= ifelse(is.na(a), median(b, na.rm=TRUE), b)), by= "Customer_id"]
これはなる、と彼はそれぞれの2回のスキャンを行うことから、上記Floo0のソリューション@よりも高速である必要がありますがカラム。
library(data.table)
library(microbenchmark)
set.seed(1234L)
dat <- data.frame(id= rep(c(1:10), each= 100),
a= rnorm(1000),
b= rnorm(1000))
dat[,2:3] <- apply(dat[,2:3], 2, function(j) {
idx <- sample.int(1000, 100, replace=F)
j[idx] <- NA
return(j)
})
require(dplyr)
impute_median <- function(x){
ind_na <- is.na(x)
x[ind_na] <- median(x[!ind_na])
as.numeric(x)
}
dat2 <- setDT(dat)
microbenchmark(Floo0= {dat %>%
group_by(id) %>%
mutate_at(vars(a, b), impute_median)},
alex= {dat[, `:=` (a= ifelse(is.na(a), median(a, na.rm=TRUE), a),
b= ifelse(is.na(a), median(b, na.rm=TRUE), b)), by= "id"]})
Unit: milliseconds
expr min lq mean median uq max neval cld
Floo0 3.703411 3.851565 4.216543 3.947955 4.167063 7.67234 100 b
alex 1.265559 1.430002 1.704431 1.486006 1.687710 5.21753 100 a
関連する問題
- 1. 未分類のIDに基づいて欠損値を記入
- 2. 予測モデルを使用して欠損値を代入する
- 3. 別の列と顧客IDの最小値に基づいて値を返すようクエリしますか?
- 4. pandasデータフレーム内の他のカテゴリ値に基づいてカテゴリ値の欠損値を埋め込む
- 5. MySQLは、値に基づいて、各顧客のタイムスタンプに基づいて行を削除します。
- 6. mathematicaを使ってデータセットに欠損値を埋め込む方法は?
- 7. パンダのデータフレームの列を比較し、欠損値を埋めてください
- 8. R:条件によって行の値に基づいてdata.frameの新しい列を埋める?
- 9. アドレスIDと顧客IDに基づく顧客アドレスの編集
- 10. Rを使用して時系列の欠損値をカウントする
- 11. Pythonは既存のデータに基づいて欠損値を埋め込みます
- 12. 欠損値を他のデータフレームの値で埋める方法
- 13. MAXの日付と顧客IDに基づいてデータを取得します
- 14. R:他の列の値に基づいて列を計算する方法は?
- 15. すべての列の値に基づいてRで重複行を削除
- 16. Rの別の列の値に基づいて列の値を割り当てる方法は?
- 17. グループのrの値に基づいて行を挿入する
- 18. 他の列の値に基づいてカウント列を追加する方法R
- 19. 電子メールIDに基づいて顧客グループを割り当てます
- 20. R:少ない行で欠損値に基づいて複数の行を削除します。
- 21. 注文IDに基づいてすべての顧客のお支払いを取得
- 22. 行と列の値を使用して欠損値を補間する
- 23. pandasは、一致する列に基づいて他のデータフレームから欠損値を埋める機能を備えていますか?
- 24. データフレーム列の欠損値をRの列中央値で塗りつぶします
- 25. 列に基づいて欠損値と負の値を持つ行を削除する
- 26. SQLを使用して列の中央値を計算する
- 27. セッションの値に基づいてAsseticにスタイルシートを埋め込む方法
- 28. セルの値に基づいて、対象シートの行をセルの値に基づいてコピーします。
- 29. Rデータフレームの値に基づいてフィルタリング
- 30. Rは以前の値に基づいて列を移入する
は 'zoo'は' ...事のこのタイプのための動物園:: na.aggregate(D [C( "A"、 "B")〕、Dの$のCUSTOMERID、FUN =中央値)の便利な機能を持っています' – user20650