1

次のようなデータフレームがあります。

structure(list(A = c(70, 70, 70, 70, 70, 70), T = c(0.1, 0.2, 
0.3, 0.4, 0.5, 0.6), X = c(434.01, 434.01, 434.75, 434.75, 434.75, 
434.01), Y = c(454.92, 454.92, 454.92, 454.92, 454.18, 454.92
), V = c(0, 0, 21.128, 0, 14.94, 14.94), thetarad = c(0.151841552716899, 
0.151841552716899, 0.150990672182432, 0.150990672182432, 0.150177486839524, 
0.151841552716899), thetadeg = c(8.69988012340509, 8.69988012340509, 
8.6511282599214, 8.6511282599214, 8.6045361718215, 8.69988012340509
)), .Names = c("A", "T", "X", "Y", "V", "thetarad", "thetadeg"
), row.names = 1423:1428, class = "data.frame")

R の特定の時点を 30 秒間隔でサブセット化したい。必要な各時点を手動でサブセット化することで、これを行うことができます。

a1=subset(binA, T==0.1)
a2=subset(binA, T==30)
a3=subset(binA, T==60)
a4=subset(binA, T==90)
a5=subset(binA, T==120)
a6=subset(binA, T==150)
a7=subset(binA, T==180)
a8=subset(binA, T==210)
a9=subset(binA, T==240)
a10=subset(binA, T==270)
a11=subset(binA, T==300)
a12=subset(binA, T==330)
a13=subset(binA, T==360)
a14=subset(binA, T==390)
a15=subset(binA, T==420)
a16=subset(binA, T==450)
a17=subset(binA, T==480)
a18=subset(binA, T==510)
a19=subset(binA, T==540)
a20=subset(binA, T==570)
a21=subset(binA, T==599.5)

sapply関数を使用してサブセット化しようとしましseqたが、混乱する結果が得られました。また、データの各サブセットで一意の A をカウントしたいと考えています。また、パッケージ内のcount関数を使用してこれを実行できることも知っています。plyr

a1=count(unique(subset(binA, T==0.1)))

ただし、カウントは複数のデータ フレームではなく、1 つのデータ フレームで機能します (間違っている場合は修正してください)。また、サブセットごとに thetadeg の手段を取りたいと思います (これは、1 つのデータ フレームのみで簡単に適用できるはずです)。そのため、特定の seq ポイントを使用して関数を作成する方法について助けが必要です。

この問題は些細なことですが、助けていただければ幸いです。

ありがとう

4

4 に答える 4

1

dfデータがデータフレームにあると仮定して、これを試してください:

sapply(c(0.1,seq(30,599,30),599.5),
       function(x)
         length(unique(df[ df$T==x, "A"])))
于 2013-11-14T16:43:12.380 に答える
0

あなたが欲しいと思う機能は次のsplitとおりです。

 subsetted.by.T <- split(dfrm, dfrm$T)
lapply(subsetted.by.T, nrow)

$`0.1`
[1] 1

$`0.2`
[1] 1

$`0.3`
[1] 1

$`0.4`
[1] 1

$`0.5`
[1] 1

$`0.6`
[1] 1

> subsetted.by.T[[1]]
      A   T      X      Y V  thetarad thetadeg
1423 70 0.1 434.01 454.92 0 0.1518416  8.69988

これらの個々のアイテムに名前を付けたい場合は、次のnames<-関数が適切です。

names(subsetted.by.T) <- paste0("a", seq(length(subsetted.by.T) ) )

「T」列の値が多少不規則である場合、 を使用cutして規則的な区切りでカテゴリを作成すると、分割の目的で役立つ可能性があります。「T」が実際に時間値である場合、問題は明確になる可能性があります。現時点では「数値」ですが、datetime クラスのカット メソッドがあります。

于 2013-11-14T16:46:33.577 に答える
0

次のコードを使用して、必要なものを取得できるはずです。これは 0.1 と 599.5 を探しませんが、簡単に操作できるはずです。

timeintervals <- seq(0,600, 30)
for(i in 1:length(timeintervals)
{
  # create the subsets for each time interval
  assign(
    paste0("a",i),
    df[df$T == timeintervals[i],]
    )

  # get all unique As
  assign(
    paste0("b",i),
    unique(df[df$T == timeintervals[i],"A"])
  )

}
于 2013-11-14T16:44:17.317 に答える