1

要素とその評価で構成されるマトリックスがあります。

matrix(data=c("A","B","C",NA,0.7,0.5,0,NA,"D","E","F","G",0.9,0.4,0.2,0.005),nrow=4,byrow=FALSE)

    [,1] [,2]  [,3] [,4]   
[1,] "A"  "0.7" "D"  "0.9"  
[2,] "B"  "0.5" "E"  "0.4"  
[3,] "C"  "0"   "F"  "0.2"  
[4,] NA   NA    "G"  "0.005"

0.1未満のすべての評価(およびその隣の要素)をNAに置き換えたいと思います。

例えば

matrix(data=c("A","B",NA,NA,0.7,0.5,NA,NA,"D","E","F",NA,0.9,0.4,0.2,NA),nrow=4, byrow=FALSE)

    [,1] [,2]  [,3] [,4]  
[1,] "A"  "0.7" "D"  "0.9"  
[2,] "B"  "0.5" "E"  "0.4"  
[3,] NA   NA    "F"  "0.2"  
[4,] NA   NA    NA   NA    

もっと良い方法があるはずだと思ったとき、私はこれを大きなforループでやろうとしていました。どんな提案でも大歓迎です。

4

2 に答える 2

1

あなたの例では、「C」はNAになります。これは間違いだと思うので、複製していません。

mat <- matrix(data=c("A","B","C",NA,0.7,0.5,0,NA,"D","E","F","G",0.9,0.4,0.2,0.005),nrow=4,byrow=FALSE)
mat[mat < 0.1] <- NA

さらに、要素とその評価を本当に保存している場合は、おそらくdata.frameの方が適しています。

> data.frame(element=toupper(letters[1:7]), rating=c(0.7,0.5,0,0.9,0.4,0.2,0.005))
   element  rating
1        A   0.700
2        B   0.500
3        C   0.000
4        D   0.900
5        E   0.400
6        F   0.200
7        G   0.005

次に、これらの値とその行全体、NAを次のように作成できます。

> df[df[,"rating"] < 0.1,] <- NA
> df
  element rating
1       A    0.7
2       B    0.5
3    <NA>     NA
4       D    0.9
5       E    0.4
6       F    0.2
7    <NA>     NA

最後に、マトリックスをdata.frameに変換する方法は次のとおりです。

elements <- as.vector(mat[,seq(from=1, to=ncol(mat),by=2)])
ratings <- as.vector(mat[,seq(from=2, to=ncol(mat),by=2)])
df <- data.frame(element=elements,rating=ratings)
于 2013-01-30T15:28:51.890 に答える
0

私は他の人と同意しています。数値にはmatrixを使用し、異なるtpes列にはdata.frameを使用することをお勧めします。

0.1未満の要素の隣の要素が何を意味するのか正確にはわかりませんが、隣接する(左)のコメント文字から理解できます。

ここに私の解決策があります。マトリックスを再度マトリックスに変換するよりも、単純なインデックス作成のためにマトリックスをベクトルに変換します。

mat <- matrix(data=c("A","B","C", NA,
                     0.7,0.5,0,NA,
                     "D","E","F","G",
                     0.9,0.4,0.2,0.005),
                     nrow=4,byrow=FALSE)
dim(mat) <- NULL
mat[c(which(mat<0.1)-4,which(mat<0.1))] <- NA
matrix(mat,nrow=4,byrow=F)

   [,1] [,2]  [,3] [,4] 
[1,] "A"  "0.7" "D"  "0.9"
[2,] "B"  "0.5" "E"  "0.4"
[3,] NA   NA    "F"  "0.2"
[4,] NA   NA    NA   NA  
于 2013-01-30T16:13:08.840 に答える