0
Attribute             Time       Value
pmEulRlcUserPacketThp 2013-04-30 12,51,34,17 
pmEulRlcUserPacketThp 2013-04-30 84,28,17,10 
pmEulRlcUserPacketThp 2013-04-30 11,43,28,15
pmEulRlcUserPacketThp 2013-04-30 80,26,17,91 
pmEulRlcUserPacketThp 2013-04-30 10,41,25,13 
pmEulRlcUserPacketThp 2013-04-30 97,35,23,12

企業でインターンシップをしています!彼らは、KS テストを行うためにこのようなデータを持っています。値列は値の配列ですが、R は文字として読み取ります。AttributeispmEulRlcUserPacketThpTimeisのときにすべての値の合計を計算したい2013-04-30。これどうやってするの?

Attributeからまでの月次Timeデータです。したがって、日付ごとに 1 つのベクトルが必要です。これで私を助けてください..!30-4-201330-5-2013Attribute

行の異なるベクトル長では機能しません

df = read.table(text="Attribute             Time       Value
    pmEulRlcUserPacketThp 2013-04-30 12,51,34,17 
    pmEulRlcUserPacketThp 2013-04-30 84,28,17,10 
    pmEulRlcUserPacketThp 2013-04-30 11,43,28,15
    pmEulRlcUserPacketThp 2013-04-30 80,26,17,91 
    pmEulRlcUserPacketThp 2013-04-30 10,41,25,13 
    pmEulRlcUserPacketThp 2013-04-30 97,35,23,12,13", 
                 header = TRUE, fill = TRUE, stringsAsFactors=F)
dfL <- concat.split.multiple(df, "Value", direction = "long")

"Error in data.frame(..., check.names = FALSE) : 
  arguments imply differing number of rows: 6, 7" 

これは私が得るエラーです!長さの異なるベクトルを含むデータで何ができますか?

異なる日付の場合:

df = read.table(text="Attribute Time Value
 pmEulRlcUserPacketThp 2013-04-30 12,51,34,17
 pmEulRlcUserPacketThp 2013-04-29 84,28,17,10
 pmEulRlcUserPacketThp 2013-04-28 11,43,28,15
 pmEulRlcUserPacketThp 2013-04-27 80,26,17,91
 pmEulRlcUserPacketThp 2013-04-26 10,41,25,13
 pmEulRlcUserPacketThp 2013-04-25 97,35,23,12",
                 header = TRUE, fill = TRUE, stringsAsFactors=F) 

今、私のデータは次のようになります。すべての連結手順を実行しました。現在のデータは

> y
              Attribute       Time V1 V2 V3 V4
1 pmEulRlcUserPacketThp 2013-04-30 12 51 34 17
2 pmEulRlcUserPacketThp 2013-04-29 84 28 17 10
3 pmEulRlcUserPacketThp 2013-04-28 11 43 28 15
4 pmEulRlcUserPacketThp 2013-04-27 80 26 17 91
5 pmEulRlcUserPacketThp 2013-04-26 10 41 25 13
6 pmEulRlcUserPacketThp 2013-04-25 97 35 23 12

今私が欲しいのは、V1、V2、V3、V4の2つの期間の集計です.1つは27日から30日、もう1つは25日から26日です。膨大なデータ n 多くの要素には適していないサブセット化を使用しています。

> y1<-y[1:4,]
> y1
              Attribute       Time V1 V2 V3 V4
1 pmEulRlcUserPacketThp 2013-04-30 12 51 34 17
2 pmEulRlcUserPacketThp 2013-04-29 84 28 17 10
3 pmEulRlcUserPacketThp 2013-04-28 11 43 28 15
4 pmEulRlcUserPacketThp 2013-04-27 80 26 17 91

> y2<-y[-(1:4),]
> y2
              Attribute       Time V1 V2 V3 V4
5 pmEulRlcUserPacketThp 2013-04-26 10 41 25 13
6 pmEulRlcUserPacketThp 2013-04-25 97 35 23 12

> z1<-aggregate(V1 ~ Attribute, y1, sum)
> z1
              Attribute  V1
1 pmEulRlcUserPacketThp 187
> z2<-aggregate(V1 ~ Attribute, y2, sum)
> z2
              Attribute  V1
1 pmEulRlcUserPacketThp 107

これは、2 つの異なる時間間隔の V1 に適用されます。これは、他の値 (V2、V3、V4) についても実行する必要があります。これには時間がかかります。集計を使用して日付を選択する方法はありますか?

4

2 に答える 2

3

あなたの質問は、最初に尋ねられてから本当に大きく変更されました。それは一般的に、SOの振る舞いとしてはあまり良くありません。だけど、優しい気持ちに…

このソリューションはconcat.split.multiple、「splitstackshape」およびaggregateベースcutR から使用して、必要なソリューションを取得します。

「splitstackshape」をロードし、少なくともバージョンであることを確認します1.2.0(これを投稿した時点で最新のもの):

library(splitstackshape)
## Make sure you're running at least version 1.2.0
packageVersion("splitstackshape")
# [1] ‘1.2.0’

サンプルデータは次のとおりです。

df <- read.table(text="Attribute Time Value
 pmEulRlcUserPacketThp 2013-04-30 12,51,34,17
 pmEulRlcUserPacketThp 2013-04-29 84,28,17,10
 pmEulRlcUserPacketThp 2013-04-28 11,43,28,15
 pmEulRlcUserPacketThp 2013-04-27 80,26,17,91
 pmEulRlcUserPacketThp 2013-04-26 10,41,25,13
 pmEulRlcUserPacketThp 2013-04-25 97,35,23,12",
 header = TRUE, fill = TRUE, stringsAsFactors = FALSE)

まず、「値」列を分割します。

y <- concat.split.multiple(df, "Value")

次に、使用する日付範囲の「間隔」列を作成します。

y$interval <- cut(as.Date(y$Time), breaks=c(as.Date(
  c("2013-04-25", "2013-04-27", "2013-04-30"))), include.lowest=TRUE)

最後に、aggregateあなたのデータです。この. ~表記により、ID 以外のすべての列を一度に集計できます。

aggregate(. ~ Attribute + interval, y[-2], sum)
#               Attribute   interval Value_1 Value_2 Value_3 Value_4
# 1 pmEulRlcUserPacketThp 2013-04-25     107      76      48      25
# 2 pmEulRlcUserPacketThp 2013-04-27     187     148      96     133

参考:バージョン 1.2.0 を使用している場合、投稿で言及したエラーは発生しなくなります。そのエラーはread.table、作成する列の数を決定する方法が原因でした。最初の 5 行のみを読み取ります。問題が発生した例では、6 行目に長い行がありました。count.fieldsこの問題を克服するために実装しました。お知らせいただきありがとうございます。

于 2013-08-15T10:07:53.200 に答える
0

これはあなたが望むものに近づいていますか?

df = read.table(text="Attribute             Time       Value
  pmEulRlcUserPacketThp 2013-04-30 12,51,34,17 
  pmEulRlcUserPacketThp 2013-04-30 84,28,17,10 
  pmEulRlcUserPacketThp 2013-04-30 11,43,28,15
  pmEulRlcUserPacketThp 2013-04-30 80,26,17,91 
  pmEulRlcUserPacketThp 2013-04-30 10,41,25,13 
  pmEulRlcUserPacketThp 2013-04-30 97,35,23,12", 
                header = TRUE, fill = TRUE, stringsAsFactors=F)


values = data.frame(t(matrix(unlist(strsplit(df$Value, ',')), ncol = nrow(df))))
values = mapply(values, FUN = function(row){as.numeric(as.character(row))})
df = cbind(df[,1:2], values)

aggregate(df$X1, by=list(df$Attribute, df$Time), FUN=sum)
aggregate(df$X2, by=list(df$Attribute, df$Time), FUN=sum)
于 2013-08-15T10:00:09.467 に答える