1

私はcsvファイルを持っています。最初の行はプレーンテキストで、他の行は数値です。この最初の行を文字ベクトルに読み込む必要があります。

matrixR = read.csv("testR.csv",sep=",",header=FALSE)
matrixR[1,]
    V1     V2      V3    V4  V5  
academic adagio admiral allan alt

上は一行目。このファイルの他に、最初のファイルと同じ形式の別の csv ファイルもあります。私は次のように読みました。

matrixJ = read.csv("testJ.csv",sep=",",header=FALSE)
matrixJ[1,]
    V1     V2      V3    V4  V5  
academic  admiral abc alt bd

matrixR の最初の行の各エントリについて、それが matrixJ の最初の行にも存在するかどうかを確認する必要があります。存在する場合は、matrixJ の最初の行で対応する位置を取得する必要があります。これが私がした方法です

which(matrixR[1,2]==matrixJ[1,])
Error in matrixR[1, 2] == matrixJ[1, ] : 
  comparison of these types is not implemented
In addition: Warning message:
  In which(matrixR[1, 2] == matrixJ[1, ]) :
  Incompatible methods ("Ops.factor", "Ops.data.frame") for "=="

この種の機能を実装する正しい方法は何ですか? ありがとう。

以下は私が提案したとおりにしたことですが、結果はまだ正しくないようです。

> matrixR = as.matrix(read.csv("testWeightR1.csv",sep=",",header=FALSE))
> matrixJ =as.matrix(read.csv("testWeightJ1.csv",sep=",",header=FALSE))
> which(unlist(matrixR[1,]) %in% unlist(matrixJ[1,]))
   [1] 1 2 3 4 6

matrixR と matrixJ の情報は次のとおりです。

matrixR[1,] V1 V2 V3 V4 V5 V6 "academic" "adagio" "admiral" "allan" "test" "admiral" matrixJ[1,] V1 V2 V3 V4 V5 V6 "academic" "adagio" "admiral" " allan" "alt" "ans" dput(head(matrixR))

 structure(c("academic", "0", "0", "0", "0", "0", "adagio", "0", 
 "0", "0", "0", "0", "admiral", "0", "0", "0", "0", "0", "allan", 
 "0", "0", "0", "0", "0", "test", "2", "2", "1", "1", "1", "admiral", 
 "0", "0", "0", "0", "0"), .Dim = c(6L, 6L), .Dimnames = list(
  NULL, c("V1", "V2", "V3", "V4", "V5", "V6")))
 > dput(head(matrixJ))
 structure(c("academic", "0", "0", "0", "0", "0", "adagio", "0", 
 "0", "0", "0", "0", "admiral", "0", "0", "0", "0", "0", "allan", 
 "0", "0", "0", "0", "0", "alt", "2", "2", "1", "1", "1", "ans", 
 "0", "1", "1", "0", "1"), .Dim = c(6L, 6L), .Dimnames = list(
  NULL, c("V1", "V2", "V3", "V4", "V5", "V6")))
4

1 に答える 1

0

これにより、 which を使用して必要なものが得られるはずです%in% with:

which(matrixR[1,] %in% matrixJ[1,])

==、1 つのアイテムと比較する場合に使用します。ベクトルの使用と比較する場合%in%

編集...

マトリックスの場合は、次を試してください。

which(unlist(matrixR[1,]) %in% unlist(matrixJ[1,]))

編集 2...

再現可能な例を提供したので、より正確なアドバイスを提供するのははるかに簡単です。

matrixR  <-
 structure(c("academic", "0", "0", "0", "0", "0", "adagio", "0", 
 "0", "0", "0", "0", "admiral", "0", "0", "0", "0", "0", "allan", 
 "0", "0", "0", "0", "0", "test", "2", "2", "1", "1", "1", "admiral", 
 "0", "0", "0", "0", "0"), .Dim = c(6L, 6L), .Dimnames = list(
  NULL, c("V1", "V2", "V3", "V4", "V5", "V6")))

matrixJ <-
 structure(c("academic", "0", "0", "0", "0", "0", "adagio", "0", 
 "0", "0", "0", "0", "admiral", "0", "0", "0", "0", "0", "allan", 
 "0", "0", "0", "0", "0", "alt", "2", "2", "1", "1", "1", "ans", 
 "0", "1", "1", "0", "1"), .Dim = c(6L, 6L), .Dimnames = list(
  NULL, c("V1", "V2", "V3", "V4", "V5", "V6")))

#> matrixR 
#     V1         V2       V3        V4      V5     V6       
#[1,] "academic" "adagio" "admiral" "allan" "test" "admiral"
#[2,] "0"        "0"      "0"       "0"     "2"    "0"      
#[3,] "0"        "0"      "0"       "0"     "2"    "0"      
#[4,] "0"        "0"      "0"       "0"     "1"    "0"      
#[5,] "0"        "0"      "0"       "0"     "1"    "0"      
#[6,] "0"        "0"      "0"       "0"     "1"    "0"      
#> 
#> matrixJ 
#     V1         V2       V3        V4      V5    V6   
#[1,] "academic" "adagio" "admiral" "allan" "alt" "ans"
#[2,] "0"        "0"      "0"       "0"     "2"   "0"  
#[3,] "0"        "0"      "0"       "0"     "2"   "1"  
#[4,] "0"        "0"      "0"       "0"     "1"   "1"  
#[5,] "0"        "0"      "0"       "0"     "1"   "0"  
#[6,] "0"        "0"      "0"       "0"     "1"   "1"  

which(matrixR[1, ] %in% matrixJ[1, ])

#> which(matrixR[1, ] %in% matrixJ[1, ])
#[1] 1 2 3 4 6

あなたが何か他のものを探していない限り、これは私が最初にあなたに与えた応答であることに注意してください:

于 2012-08-06T14:09:59.993 に答える