2017-10-18 18 views
-1

問題のコードを作成するためのヒントを教えてもらえますか?ステップバイステップ私はいくつかの問題を解決することができますが、私は自分の仕事をスピードアップするためにループを書くことと自分自身の機能から始める方法を知らない。以下、小さなデータセットのために私の最後の問題を見ることができますが、私は非常に簡単ですが、問題は大きなデータセット(30個以上の "diff"カラムを作成する必要がある場合)です。 手動処理を高速化するコードの作成方法

はあなたの時間をありがとうございました:)

id=c(0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0) 
distance=c(43.59304, 152.66197, 208.00968, 272.92662, 380.79429, 
469.62269, 556.72725,734.29125, 796.42570, 873.09448, 1040.64550) 
c=data.frame(id,distance) 
c 
c[paste("diff",1:3, sep="")]=NA 
c$diff1=abs(c[c$id>0,][1,2]-c$distance) 
c$diff2=abs(c[c$id>0,][2,2]-c$distance) 
c$diff3=abs(c[c$id>0,][3,2]-c$distance) 
c 
c$min=apply(c[,c(3:5)], 1,FUN=min) 

編集:

は基本的に私は、IDと各ポイントの最短距離を計算したい= 0 ID = 1と最も近い点まで。 データ "距離"は各点の線に沿った距離です。真ん中の部分は、2つの入力ベクトルのすべてのペアを(あなたの関数、すなわち絶対差)関数を適用する、outerを用いて行うことができること

Picture for better understening

+8

具体的な問題を説明し、私たちがそれを解読することを期待せず、変数 'c'を決して指定しないでください;) –

+0

@Moody_Mudskipperコメントも追加してください。あなたの質問にお応えするために[完全な最小限の再現可能な例を提供する](http://stackoverflow.com/help/mcve)を提供すると、私たちはあなたを助けることができるでしょう。私たちは仕事をして、あなたの質問に答えることができるかもしれないことをあなたに示すために使うことができます。私は[私は良い質問をしますか?](https://stackoverflow.com/help/how -聞く、質問する)。 –

答えて

0

したがって、@Moody_Mudskipperが良い点を作ったので、私はスイッチ表記を変更しました。変数名は決してcにしてください。

列の位置が変更された場合に備えて、列のインデックスではなく名前を明示的に参照する方がよい場合があります。

df <- structure(list(id = c(0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0), 
       distance = c(43.59304, 152.66197, 208.00968, 
           272.92662, 380.79429, 469.62269, 
           556.72725, 734.29125, 796.4257, 
           873.09448, 1040.6455)), 
      .Names = c("id", "distance"), 
      row.names = c(NA, -11L), 
      class = "data.frame") 

differences <- 
    outer(Y = df[df[["id"]] > 0, "distance"], X = df[, "distance"], FUN = function(x, y){ 
     abs(x - y) 
    }) 

differences <- as.data.frame(differences) 

names(differences) <- paste0("diff", seq_len(ncol(differences))) 

differences[["min"]] <- apply(differences, 1, min) 

cbind(df, differences) 

ご覧のとおり、これは柔軟性があるため、より多くのデータにも役立ちます。あなたのニーズがまったく異なる場合は、より具体的にしてより多くの情報を共有してください。

+0

ありがとう、これはまさに私が欲しかったものです:) – user8795501

関連する問題