将信息从两列R、tidyverse中拆分
我有两列数据:将信息从两列R、tidyverse中拆分,r,tidyverse,R,Tidyverse,我有两列数据: # A tibble: 16 x 2 code niveau <chr> <dbl> 1 A 1 2 1 2 3 2 2 4 3 2 5 4 2 6 5 2 7 B 1 8 6 2 9 7 2 #一个tible:16 x 2 代码niveau 1 A 1 2 1
# A tibble: 16 x 2
code niveau
<chr> <dbl>
1 A 1
2 1 2
3 2 2
4 3 2
5 4 2
6 5 2
7 B 1
8 6 2
9 7 2
#一个tible:16 x 2
代码niveau
1 A 1
2 1 2
3 2 2
4 3 2
5 4 2
6 5 2
7 B 1
8 6 2
9 7 2
我期望的输出是:
A tibble: 16 x 3
code niveau cat
<chr> <dbl> <chr>
1 A 1 A
2 1 2 A
3 2 2 A
4 3 2 A
5 4 2 A
6 5 2 A
7 B 1 B
8 6 2 B
A tibble:16 x 3
代码niveau猫
1 A 1 A
2 1 2 A
3 2 A
4 3 2 A
5 4 2 A
6 5 2 A
7b 1b
8 6 2 B
我想知道有没有一种简洁的方法来转换这些数据而不必循环
以下是一些虚拟数据:
data<-tibble(code=c('A', 1,2,3,4,5,'B', 6,7,8,9,'C',10,11,12,13), niveau=c(1, 2,2,2,2,2,1,2,2,2,2,1,2,2,2,2))
desired_output<-tibble(code=c('A', 1,2,3,4,5,'B', 6,7,8,9,'C',10,11,12,13), niveau=c(1, 2,2,2,2,2,1,2,2,2,2,1,2,2,2,2),
cat=c(rep('A', 6),rep('B', 5), rep('C', 5)))
data可能,您可以创建一个新列cat
,并在有数字的地方将code
值替换为NA
。然后,我们可以使用fill
将缺少的值替换为以前的非NA值
library(dplyr)
data %>% mutate(cat = replace(code, grepl('\\d', code), NA)) %>% tidyr::fill(cat)
# A tibble: 16 x 3
# code niveau cat
# <chr> <dbl> <chr>
# 1 A 1 A
# 2 1 2 A
# 3 2 2 A
# 4 3 2 A
# 5 4 2 A
# 6 5 2 A
# 7 B 1 B
# 8 6 2 B
# 9 7 2 B
#10 8 2 B
#11 9 2 B
#12 C 1 C
#13 10 2 C
#14 11 2 C
#15 12 2 C
#16 13 2 C
库(dplyr)
数据%>%突变(cat=replace(代码,grepl('\\d',code),NA))%>%tidyr::fill(cat)
#一个tibble:16 x 3
#代码niveau猫
#
#1 A 1 A
#2 1 2 A
#3 2 A
#4 3 2 A
#5 4 2 A
#6 5 2 A
#7b 1b
#8 6 2 B
#9 7 2 B
#10 8 2 B
#11 9 2 B
#12 C 1 C
#13 10 2 C
#14 11 2 C
#15 12 2 C
#16 13 2 C
我们可以从stringr
library(dplyr)
library(stringr)
library(tidyr)
data %>%
mutate(cat = replace(code, str_detect(code, '\\d'), NA)) %>%
fill(cat)
嗨,Ronak,这非常有效,节省了很多时间-我不知道填充功能。非常感谢:-)