私は次のデータフレームを持っています:
library(tidyverse)
library(tibble)
data_frame <-
tribble(
~a, ~b,
"2,29,3,30,31,4,5,2,28,29,3,30,4,5", "x",
"12,13,14,15,18,19,20,12,13,14,15,18,19,20,21" , "y"
)
このデータフレームにcと呼ばれる新しい列を作成します。この列は、文字列a
を番号の昇順で並べて表示できます。Cは、理想的には次のようになります。
library(tidyverse)
library(tibble)
data_frame <-
tribble(
~a, ~b, ~c,
"2,29,3,30,31,4,5,2,28,29,3,30,4,5", "x", "2,2,3,3,4,4,5,5,28,29,29,30,30,31"
"12,13,14,15,18,19,20,12,13,14,15,18,19,20,21" , "y", "12,12,13,13,14,14,15,15,18,18,19,19,20,20,21"
)
どうすればこれを達成できますか?私が使って試してみましたstr_sort
からstringr
、パッケージ、およびmixedsort
から関数gtools
ライブラリを。ありがとうございました。
ではtidyverse
、をseparate_rows
変換する際type
に使用して、「a」を区切り文字で分割し、次にarrange
「b」、「a」、列を「b」でグループ化しpaste
て、新しい列に「a」の要素をバインドします。元のデータセット
library(dplyr)
library(tidyr)
data_frame %>%
# // split a by the delimiter and expand the rows
separate_rows(a, convert = TRUE) %>%
# // order the columns
arrange(b, a) %>%
# // grouped by b
group_by(b) %>%
# paste the elements of a
# toString => paste(..., collapse=", ")
summarise(c = toString(a)) %>%
# // select the column c
select(c) %>%
# // bind with the original dataset
bind_cols(data_frame, .)
# A tibble: 2 x 3
# a b c
# <chr> <chr> <chr>
#1 2,29,3,30,31,4,5,2,28,29,3,30,4,5 x 2, 2, 3, 3, 4, 4, 5, 5, 28, 29, 29, 30, 30, 31
#2 12,13,14,15,18,19,20,12,13,14,15,18,19,20,21 y 12, 12, 13, 13, 14, 14, 15, 15, 18, 18, 19, 19, 20, 20, 21
またはで使用strsplit
しmap
ます。私たちは、と「」文字列を分割,
、以上のループlist
とをmap
、に変換しnumeric
、sort
その後、paste
その単一の文字列に
library(purrr)
data_frame %>%
mutate(c = map_chr(strsplit(a, ","), ~
toString(sort(as.numeric(.x)))))
# A tibble: 2 x 3
# a b c
# <chr> <chr> <chr>
#1 2,29,3,30,31,4,5,2,28,29,3,30,4,5 x 2, 2, 3, 3, 4, 4, 5, 5, 28, 29, 29, 30, 30, 31
#2 12,13,14,15,18,19,20,12,13,14,15,18,19,20,21 y 12, 12, 13, 13, 14, 14, 15, 15, 18, 18, 19, 19, 20, 20, 21
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加