我想基于字符串索引将glazingMaterial.AddToOsm(model)
列分为3列(称为“ A”,“ B”,“ C”)。第一列只报告项目1,第二列T
,最后一列4:7。
ID
我已经定义了向量,其字符串位置如下所示
2:3
我正在尝试将定义的向量用于单独的函数中
ID Data
mw21e10 878
mw61e10 908
mw61e10 1073
答案 0 :(得分:1)
我们可以基于'a','b'向量使用substring
,然后使用unnest_wider
将list
列更改为三列
library(dplyr)
library(tidyr)
mydata %>%
rowwise %>%
mutate(new = list(substring(ID, a, b))) %>%
ungroup %>%
unnest_wider(c(new), names_repair = ~c(names(mydata), 'A', 'B', 'C'))
-输出
# A tibble: 3 x 5
# ID Data A B C
# <chr> <int> <chr> <chr> <chr>
#1 mw21e10 878 m w2 1e10
#2 mw61e10 908 m w6 1e10
#3 mw61e10 1073 m w6 1e10
或者,如果我们需要使用separate
,请确保仅指定分割位置,而不是两个向量的范围。根据{{1}}的输出,它位于位置1、3
substr
-输出
mydata %>%
separate(ID, into = c("A", "B", "C"), c(1, 3 ), remove = FALSE)
或将# ID A B C Data
#1 mw21e10 m w2 1e10 878
#2 mw61e10 m w6 1e10 908
#3 mw61e10 m w6 1e10 1073
与base R
一起使用
Map
mydata[c('A', 'B', 'C')] <- Map(substring, mydata$ID,
MoreArgs = list(first = a, last = b))
答案 1 :(得分:0)
一个dplyr
和purrr
选项可以是:
df %>%
bind_cols(map2_dfc(.x = c(1,2,4),
.y = c(1,3,7),
~ df %>%
transmute(col = substr(ID, .x, .y))) %>%
set_names(c("A", "B", "C")))
ID Data A B C
1 mw21e10 878 m w2 1e10
2 mw61e10 908 m w6 1e10
3 mw61e10 1073 m w6 1e10