2

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

date = "2000"
values = c("a","b","d")
df <- data.frame(date=date,values= values)
df
  date values
1 2000      a
2 2000      b
3 2000      d

実際、私はフィールドに何千もの値を持っていvaluesます。したがって、個別の行として印刷する代わりに、データフレームにすべての情報を含む1つの行が含まれるようにしたい.つまり、次のようなもの:

1 2000    a,b,d

map<String,arrayList(String)>JavaのようなRでこれは可能ですか?

4

3 に答える 3

7

何が必要かは明確ではありませんが、aggregate開始するためのコードを次に示します。

> df$values <- as.character(df$values)
> # A `list` of the values
> (da1 <- aggregate(values ~ date, df, I, simplify=FALSE))
  date  values
1 2000 a, b, d
> str(da1)
'data.frame':   1 obs. of  2 variables:
 $ date  : Factor w/ 1 level "2000": 1
 $ values:List of 1
  ..$ 0:Class 'AsIs'  chr [1:3] "a" "b" "d"

> # All the values collapsed into one string
> (da2 <- aggregate(values ~ date, df, paste, collapse = ", ", simplify=FALSE))
  date  values
1 2000 a, b, d
> str(da2)
'data.frame':   1 obs. of  2 variables:
 $ date  : Factor w/ 1 level "2000": 1
 $ values:List of 1
  ..$ 0: chr "a, b, d"

strここで 2 つの例の違いを確認できるように、ucture を示しました。


以下のコメントを正しく理解していれば、これにも興味があるかもしれません。

> date = "2000"
> values = c("a", "b", "d")
> (temp <- data.frame(date, values = I(list(values))))
  date  values
1 2000 a, b, d
> str(temp)
'data.frame':   1 obs. of  2 variables:
 $ date  : Factor w/ 1 level "2000": 1
 $ values:List of 1
  ..$ : chr  "a" "b" "d"
  ..- attr(*, "class")= chr "AsIs"

つまり、 をlist作成するときに を列項目として使用する場合は、 関数data.frameを使用する必要がありIます。

于 2013-04-25T09:34:53.460 に答える
3

このようなもの?

df <- structure(list(date = c(2000L, 2000L, 2000L), values = structure(1:3, .Label = c("a", 
"b", "d"), class = "factor")), .Names = c("date", "values"), class = "data.frame", row.names = c(NA, 
-3L))

これにより、すべての情報を 1 行で取得するために出力として提案したものが得られますが、すべての値は 1 つのセルにあります。

library(plyr)

df2 <- ddply(df,.(date),summarize,values=as.list(paste(values,collapse=",")))

データをワイド形式に変換して、各値が新しい変数になるようにすることもできます。

library(reshape2)

df$id <- seq_along(df)
dfwide <- reshape(df, idvar = c("date"),timevar = "id", direction = "wide")
于 2013-04-25T09:34:00.350 に答える
2

これにより、年ごとの値のリストが得られます。

tapply(df$values,df$date,I)

それはあなたが望むものですか?

于 2013-04-25T09:36:38.893 に答える