我的tibble中有一个名为sourceMedium的列,其字符串如此:
"apples / pears"
我想将其变为两个新列,然后删除原始列。我试图在dplyr操作链中做到这一点,我无法得到它:
wrangled <- gaDataSessionsAggregate %>%
+ mutate(source = unlist(strsplit(sourceMedium, "/"))[1],
medium = unlist(strsplit(sourceMedium, "/"))[2])
这会运行,但我只在两个新字段中获得一个唯一值。每个新字段中应该有许多基于原始列的唯一值。看起来r保持tibble中的第一个值并将其应用于列中的每个其他实例。
什么是最短的,最常见的&#34; dplyr esque&#34;采取现场sourceMedium的方式,分成两个新的领域&#34; source&#34;和&#34;媒体&#34;基于斜杠分隔符&#34; /&#34;?
答案 0 :(得分:0)
Dplyr不像处理矢量列一样处理列表列的元素。因此,在变异/取消列表之前传递dplyr::rowwise()
:
library(dplyr)
library(stringr)
orig <- tibble(sourceMedium = c('apples / pears', 'red / blue', 'green / grey',
'wet / dry', 'ear / nose', 'mac / linux'))
wrangled <- orig %>%
dplyr::mutate(tempcol = stringr::str_split(sourceMedium, ' / ')) %>%
dplyr::rowwise() %>%
dplyr::mutate(source = unlist(tempcol)[1], medium = unlist(tempcol)[2]) %>%
dplyr::select(-tempcol)
wrangled
提供以下输出:
Source: local data frame [6 x 3]
Groups: <by row>
# A tibble: 6 × 3
sourceMedium source medium
<chr> <chr> <chr>
1 apples / pears apples pears
2 red / blue red blue
3 green / grey green grey
4 wet / dry wet dry
5 ear / nose ear nose
6 mac / linux mac linux
>