データフレームに新しい列を追加する目的で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'?
事前に助けてくれてありがとう!
sep =
ではなくcollapse =
を使用する必要がありますが、なぜsort
を使用するのですか?そして、paste0
ではなくpaste
を使用しました。
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
が作成されます。
ポールの答えに加えて。行を並べ替えるには、 order を試してください。以下に例を示します。
res1 <- mutate(states.df,
concated_column = apply(states.df[order(name, region, division), ], 1,
function(x) paste0(x, collapse = "_")))
ここで、順序はdata.frame states.dfを名前でソートし、次に地域と部門でタイを分割します