この質問には多くのものがあります。まず、データを列cで分割したいと思います。部分集合は因子cによって与えられ、レベルは1〜4である。したがって、4つの異なるセグメント。 次の2つの列があります。 a列とb列。 NAを各セグメント固有の列の最大値に置き換えたいと思います。たとえば、行3と列 'a'のNAは30になります。(b、3)は80、(b、8)は50、(a、5)は80になります。NAを行と列に固有の値に置き換えてください。
私は仕事をしている下のコードを作成しましたが、今はすべてのセグメントと列に対してforループのように自動化する必要があります。どうすればこのことができますか?
a <- c(10,NA,30,40,NA,60,70,80,90,90,80,90,10,40)
b <- c(80,70,NA,50,40,30,20,NA,0,0,10,69, 40, 90)
c <- c(1,1,1,2,2,2,2,2,3,3,3,4,4,4)
a b c
1: 10 80 1
2: NA 70 1
3: 30 NA 1
4: 40 50 2
5: NA 40 2
6: 60 30 2
7: 70 20 2
8: 80 NA 2
9: 90 0 3
10: 90 0 3
11: 80 10 3
12: 90 69 4
13: 10 40 4
14: 40 90 4
mytable <- data.table(a,b,c)
mytable[which(is.na(mytable[c == 1][,1, with = FALSE]) == TRUE),1] <- max(mytable[c==1,1], na.rm = TRUE)
残念ながら、これはエラーに結果を試してみてください:[<-.data.table
で
for(i in unique(mytable$c)){
for(j in unique(c(1:2))){
mytable[which(is.na(mytable[c == i][,j, with = FALSE]) == TRUE),j, with = FALSE] <- max(mytable[c==i][,j, with = FALSE], na.rm = TRUE)
}
}
エラー(*tmp*
、(is.na([、J = FALSE付き] [C == i]はmytableは)==: = FALSEと未使用の引数()
驚くべきことに、これは、同様にエラーになる:
for(i in unique(mytable$c)){
for(j in unique(c(1:2))){
mytable[which(is.na(mytable[c == i][,j]) == TRUE),j] <- max(mytable[c==i,j], na.rm = TRUE)
}
}
[.data.table
(mytable、c == i、j)のエラー: j([...]内の2番目の引数)は単一のシンボルですが、列名 'j'が見つかりません。おそらくあなたはDT [、.. j]またはDT [、j、= FALSE]を意図していました。このdata.frameとの違いは、意図的なものであり、FAQ 1.1で説明されています。
の使用: a)、b = ifelse(is.na(a)、max(a、na.rm = TRUE)、a = ifelse(is.na(a)、max(a、na.rm = TRUE) ' – count