3

すべてのコミュニティにこんにちは、私は次の DB を持っています:

ID Distance
M1_PRM    54,56
M1_PRM  4147,69
M1_PRM  1723,34

次のスクリプトを使用して、「。」の「、」を置き換えます。Rは「、」が好きではないので、距離で(そしてそれは機能します):

mysub<-function(x)(sub(",",".",x))
DB<-(apply(DB, 2,mysub))
DB<-data.frame(DB)

次に、合計と組み合わせてas.numeric使用​​する必要があるため、次 のように DB$Distance を変換する必要があります。tapply

apply(DB$Distance,ID,sum)

私が与えるとき

DB$Distance<-as.numeric(DB$Distance)

ID Distance
M1_PRM 54
M1_PRM 4147
M1_PRM 1723

Rは小数を破棄するようです!!! 誰かが何が悪いのか知っていますか? 前もって感謝します!

4

3 に答える 3

5

別のアプローチ (これをファイルから読み込んでいる場合):

dat <- read.table(text = "ID Distance
 M1_PRM    54,56
 M1_PRM  4147,69
 M1_PRM  1723,34",header = TRUE,sep = "",dec = ",")
> dat
      ID Distance
1 M1_PRM    54.56
2 M1_PRM  4147.69
3 M1_PRM  1723.34
于 2013-01-18T15:54:53.400 に答える
3

@joran's Answer は、orで読み込んDBでいる場合、それ以外の場合は、オプションを取る があります。read.tableread.csvtype.convertdec

type.convert(as.character(DB$Distance), dec = ",")
# [1]   54.56 4147.69 1723.34

がすでにそのようなものas.characterである場合は破棄します。Distance

于 2013-01-18T16:03:29.380 に答える
1

呼び出しで間違った方法で行っているため、R は 10 進数を破棄しています。apply代わりに試してください

> DB$Distance <- as.numeric(sub(",",".",DB$Distance))
> sapply(DB, class)
       ID  Distance 
 "factor" "numeric" 
> DB
      ID Distance
1 M1_PRM    54.56
2 M1_PRM  4147.69
3 M1_PRM  1723.34

次に、次のように使用tapplyします。

with(DB, tapply(Distance, ID, sum))

あなたapply(DB$Distance,ID,sum)は機能しません。代わりに使用しtapply(DB$Distance, DB$ID, sum)てください。正しい関数はtapplyであり、数値バークターとインデックスを指定する必要があるためです。どちらも に添付されているため、関数 またはを使用しない限りDB、R は検出されません。IDwith(.)DB$ID

とを参照?applyしてください?tapply

私はあなたの投稿に従ってあなたに答えようとしています。@joranの答えは、ファイルからデータをインポートする場合の直接的な方法です。その場合、問題はすべて呼び出しで使用することdec = ","になりますread.table

于 2013-01-18T15:53:58.913 に答える