R中的聚集函数以匹配字符串中的模式
我想把宽桌子改成长桌子。我要收集的列有一个模式。现在,我只能根据他们的位置来收集他们。如何更改此选项以按列名中的模式收集它们?请仅使用收集功能 我已经包括了一个示例数据集,但是在真实数据集中有更多的列。因此,我想收集以下所有专栏:R中的聚集函数以匹配字符串中的模式,r,function,subset,tidyr,R,Function,Subset,Tidyr,我想把宽桌子改成长桌子。我要收集的列有一个模式。现在,我只能根据他们的位置来收集他们。如何更改此选项以按列名中的模式收集它们?请仅使用收集功能 我已经包括了一个示例数据集,但是在真实数据集中有更多的列。因此,我想收集以下所有专栏: 以f或m 后跟一个或两个数字 dput(头部(测试1,1)) 结构(列表(startdate=“2019-11-06”,id=“POL55”,m0_9=NA_real), m10_19=NA_real_,m20_29=NA_real,m30_39=NA_real, m
f
或m
计数
当然应该计数
startdate id age_cat count
<chr> <chr> <chr> <dbl>
1 2019-11-06 POL55 m0_9 NA
2 2019-11-06 POL56 m0_9 NA
3 2019-11-06 POL57 m0_9 NA
4 2019-11-06 POL58 m0_9 NA
5 2019-11-06 POL59 m0_9 NA
6 2019-11-06 POL60 m0_9 NA
7 2019-11-06 POL61 m0_9 NA
8 2019-11-06 POL62 m0_9 NA
9 2019-11-06 POL63 m0_9 NA
10 2019-11-06 POL64 m0_9 NA
startdate id age\u cat count
2019-11-06波兰55 m0_9 NA
2019-11-06波兰56 M09NA
3 2019-11-06波兰57 m0_9 NA
4 2019-11-06波尔58 m0_9 NA
5 2019-11-06 POL59 m0_9 NA
2019年11月6日POL60 m0_9 NA
7 2019-11-06 POL61 m0_9 NA
8 2019-11-06 POL62 m0_9 NA
9 2019-11-06 POL63 m0_9 NA
10 2019-11-06 POL64 m0_9 NA
使用以开始:
test1 %>%
gather(age_bucket, count, c(starts_with("m"), starts_with("f")))
使用开始时使用:
test1 %>%
gather(age_bucket, count, c(starts_with("m"), starts_with("f")))
我们可以从tidyr
library(dplyr)
library(tidyr)
test1 %>%
pivot_longer(cols = -c(startdate, id), names_to = c('.value', 'grp'), names_sep="_")
也可能是
test1 %>%
pivot_longer(cols = -c(startdate, id),
names_to = c( '.value', 'grp'), names_pattern = "^([a-z])(.*)")
# A tibble: 8 x 5
# startdate id grp m f
# <chr> <chr> <chr> <dbl> <dbl>
#1 2019-11-06 POL55 0_9 NA 32
#2 2019-11-06 POL55 10_19 NA NA
#3 2019-11-06 POL55 20_29 NA NA
#4 2019-11-06 POL55 30_39 NA NA
#5 2019-11-06 POL55 40_49 32 NA
#6 2019-11-06 POL55 50_59 NA NA
#7 2019-11-06 POL55 60_69 NA NA
#8 2019-11-06 POL55 70 NA NA
test1%>%
枢轴长度(cols=-c(起始日期,id),
names_to=c('.value','grp'),names_pattern=“^([a-z])(.*)”
#一个tibble:8x5
#起始日期id grp m f
#
#2019年11月6日波兰
#2019年11月6日波兰
#2019年11月6日波兰
#2019年11月6日波兰
#5 2019-11-06波兰
#2019年11月6日波兰
#7 2019-11-06 POL55 60_69 NA
#8 2019-11-06波兰55 70 NA
或者可能是
test1 %>%
pivot_longer(cols = -c(startdate, id),
names_to = c( 'grp', '.value'), names_pattern = "^([a-z])(.*)")
# A tibble: 2 x 11
# startdate id grp `0_9` `10_19` `20_29` `30_39` `40_49` `50_59` `60_69` `70`
# <chr> <chr> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
#1 2019-11-06 POL55 m NA NA NA NA 32 NA NA NA
#2 2019-11-06 POL55 f 32 NA NA NA NA NA NA NA
test1%>%
枢轴长度(cols=-c(起始日期,id),
names_to=c('grp','.value'),names_pattern=“^([a-z])(.*)”
#一个tibble:2x11
#起始日期id grp`0\u 9``10\u 19``20\u 29``30\u 39``40\u 49``50\u 59``60\u 69``70`
#
#2019年11月06日POL55米NA NA 32 NA NA NA NA
#2019年11月06日POL55 f 32不适用
也可能是这样
test1 %>%
pivot_longer(cols = matches("^(f|m)\\d+_?\\d*$"), names_to = 'age_bucket',
values_to = 'count')
# A tibble: 16 x 4
# startdate id age_bucket count
# <chr> <chr> <chr> <dbl>
# 1 2019-11-06 POL55 m0_9 NA
# 2 2019-11-06 POL55 m10_19 NA
# 3 2019-11-06 POL55 m20_29 NA
# 4 2019-11-06 POL55 m30_39 NA
# 5 2019-11-06 POL55 m40_49 32
# 6 2019-11-06 POL55 m50_59 NA
# 7 2019-11-06 POL55 m60_69 NA
# 8 2019-11-06 POL55 m70 NA
# 9 2019-11-06 POL55 f0_9 32
#10 2019-11-06 POL55 f10_19 NA
#11 2019-11-06 POL55 f20_29 NA
#12 2019-11-06 POL55 f30_39 NA
#13 2019-11-06 POL55 f40_49 NA
#14 2019-11-06 POL55 f50_59 NA
#15 2019-11-06 POL55 f60_69 NA
#16 2019-11-06 POL55 f70 NA
test1%>%
pivot_longer(cols=matches(“^(f|m)\\d+\u?\\d*$”),name_to='age_bucket',
值(到='count')
#一个tibble:16 x 4
#起始日期id年限\桶计数
#
#2019-11-06波兰55 m0_9 NA
#2019年11月6日POL55 m10_19 NA
#2019年11月6日POL55 m20_29 NA
#4 2019-11-06 POL55 m30_39 NA
#5 2019-11-06 POL55 M404932
#6 2019-11-06 POL55 M5059NA
#7 2019-11-06 POL55 m60_69 NA
#8 2019-11-06 POL55 m70 NA
#9 2019-11-06 POL55 f0_9 32
#10 2019-11-06波兰55 F1019NA
#11 2019-11-06 POL55 f20_29 NA
#12 2019-11-06 POL55 f30_39 NA
#13 2019-11-06波兰55 F4049NA
#14 2019-11-06波兰55 f50
#15 2019-11-06 POL55 f60_69 NA
#16 2019-11-06 POL55 f70北美
我们可以从tidyr
library(dplyr)
library(tidyr)
test1 %>%
pivot_longer(cols = -c(startdate, id), names_to = c('.value', 'grp'), names_sep="_")
也可能是
test1 %>%
pivot_longer(cols = -c(startdate, id),
names_to = c( '.value', 'grp'), names_pattern = "^([a-z])(.*)")
# A tibble: 8 x 5
# startdate id grp m f
# <chr> <chr> <chr> <dbl> <dbl>
#1 2019-11-06 POL55 0_9 NA 32
#2 2019-11-06 POL55 10_19 NA NA
#3 2019-11-06 POL55 20_29 NA NA
#4 2019-11-06 POL55 30_39 NA NA
#5 2019-11-06 POL55 40_49 32 NA
#6 2019-11-06 POL55 50_59 NA NA
#7 2019-11-06 POL55 60_69 NA NA
#8 2019-11-06 POL55 70 NA NA
test1%>%
枢轴长度(cols=-c(起始日期,id),
names_to=c('.value','grp'),names_pattern=“^([a-z])(.*)”
#一个tibble:8x5
#起始日期id grp m f
#
#2019年11月6日波兰
#2019年11月6日波兰
#2019年11月6日波兰
#2019年11月6日波兰
#5 2019-11-06波兰
#2019年11月6日波兰
#7 2019-11-06 POL55 60_69 NA
#8 2019-11-06波兰55 70 NA
或者可能是
test1 %>%
pivot_longer(cols = -c(startdate, id),
names_to = c( 'grp', '.value'), names_pattern = "^([a-z])(.*)")
# A tibble: 2 x 11
# startdate id grp `0_9` `10_19` `20_29` `30_39` `40_49` `50_59` `60_69` `70`
# <chr> <chr> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
#1 2019-11-06 POL55 m NA NA NA NA 32 NA NA NA
#2 2019-11-06 POL55 f 32 NA NA NA NA NA NA NA
test1%>%
枢轴长度(cols=-c(起始日期,id),
names_to=c('grp','.value'),names_pattern=“^([a-z])(.*)”
#一个tibble:2x11
#起始日期id grp`0\u 9``10\u 19``20\u 29``30\u 39``40\u 49``50\u 59``60\u 69``70`
#
#2019年11月06日POL55米NA NA 32 NA NA NA NA
#2019年11月06日POL55 f 32不适用
也可能是这样
test1 %>%
pivot_longer(cols = matches("^(f|m)\\d+_?\\d*$"), names_to = 'age_bucket',
values_to = 'count')
# A tibble: 16 x 4
# startdate id age_bucket count
# <chr> <chr> <chr> <dbl>
# 1 2019-11-06 POL55 m0_9 NA
# 2 2019-11-06 POL55 m10_19 NA
# 3 2019-11-06 POL55 m20_29 NA
# 4 2019-11-06 POL55 m30_39 NA
# 5 2019-11-06 POL55 m40_49 32
# 6 2019-11-06 POL55 m50_59 NA
# 7 2019-11-06 POL55 m60_69 NA
# 8 2019-11-06 POL55 m70 NA
# 9 2019-11-06 POL55 f0_9 32
#10 2019-11-06 POL55 f10_19 NA
#11 2019-11-06 POL55 f20_29 NA
#12 2019-11-06 POL55 f30_39 NA
#13 2019-11-06 POL55 f40_49 NA
#14 2019-11-06 POL55 f50_59 NA
#15 2019-11-06 POL55 f60_69 NA
#16 2019-11-06 POL55 f70 NA
test1%>%
pivot_longer(cols=matches(“^(f|m)\\d+\u?\\d*$”),name_to='age_bucket',
值(到='count')
#一个tibble:16 x 4
#起始日期id年限\桶计数
#
#2019-11-06波兰55 m0_9 NA
#2019年11月6日POL55 m10_19 NA
#2019年11月6日POL55 m20_29 NA
#4 2019-11-06 POL55 m30_39 NA
#5 2019-11-06 POL55 M404932
#6 2019-11-06 POL55 M5059NA
#7 2019-11-06 POL55 m60_69 NA
#8 2019-11-06 POL55 m70 NA
#9 2019-11-06 POL55 f0_9 32
#10 2019-11-06波兰55 F1019NA
#11 2019-11-06 POL55 f20_29 NA
#12 2019-11-06 POL55 f30_39 NA
#13 2019-11-06波兰55 F4049NA
#14 2019-11-06波兰55 f50
#15 2019-11-06 POL55 f60_69 NA
#16 2019-11-06 POL55 f70北美
这完全是基于列名以f或m开头的匹配,对吗?@Danka最后一个选项“是”,正如我在问题中提到的,我将有更多的列,我不想我匹配,其中一些将以m或开始f@Danka根据您的示例,不清楚预期输出是什么,即您的描述是以f或m开头,以避免非特定的mat