32

mutate{dplyr}データフレームに新しい列を追加する目的で関数を使用すると問題が発生します。新しい列を文字型にし、他の列 (これも文字型) からソートされた単語の「連結」で構成する必要があります。たとえば、次のデータ フレームの場合:

> library(datasets)
> states.df <- data.frame(name = as.character(state.name),
+                         region = as.character(state.region),
+                         division = as.character(state.division))
> 
> head(states.df, 3)
     name region           division
1 Alabama  South East South Central
2  Alaska   West            Pacific
3 Arizona   West           Mountain 

次の最初の要素を持つ新しい列を取得したいと思います。

"Alamaba_East South Central_South" 

私はこれを試しました:

mutate(states.df,
   concated_column = paste0(sort(name, region, division), collapse="_"))

しかし、私はエラーを受け取りました:

Error in sort(1:50, c(2L, 4L, 4L, 2L, 4L, 4L, 1L, 2L, 2L, 2L, 4L, 4L,  : 
  'decreasing' must be a length-1 logical vector.
Did you intend to set 'partial'?

事前に助けてくれてありがとう!

4

2 に答える 2

41

sep =notを使用する必要がありcollapse =、なぜsort? を使用する必要があります。そして、私は使用し、使用pasteしませんでしpaste0た。

library(dplyr)
states.df <- data.frame(name = as.character(state.name),
                        region = as.character(state.region), 
                        division = as.character(state.division))
res = mutate(states.df,
   concated_column = paste(name, region, division, sep = '_'))

並べ替えに関しては、sort正しく使用していません。多分あなたがしたい:

as.data.frame(lapply(states.df, sort))

これにより、各列がソートさdata.frameれ、それらの列で新しい が作成されます。

于 2014-02-13T11:15:01.333 に答える
2

ポールの答えに追加します。行を並べ替えたい場合は、orderを試すことができます。次に例を示します。

res1 <- mutate(states.df,
          concated_column = apply(states.df[order(name, region, division), ], 1, 
                                  function(x) paste0(x, collapse = "_")))

ここで、順序は data.frame states.df を名前で並べ替えてから、地域と部門で同点を打ち破ります

于 2016-09-29T14:33:01.760 に答える