如何解决拆分字符串并使用strsplit提取小数位信息以及最小值和最大值
我有一些看起来像这样的数据
grp grp2 figures
1 10016 13567 0.55 - 0.65
2 1270 2090 1.90 - 2
3 8757 12259 6.60 - 7\n8.50 - 9.50
4 2589 3982 2.75 - 3.15
5 9099 12573 1.24 - 1.30\n1.22 - 1.30\n0.08 - 0.10\n0.10 - 0.12
6 5211 8334 6.90 - 7.40
7 9994 13542 2.73 - 2.78
8 2685 4113 0.72 - 0.74\n2.75 - 2.77\n3.10 - 3.18
9 9778 13295 32 - 39\n190 - 200\n142 - 152\n90 - 100
10 772 1317 2.20 - 2.40
我想从figures
列中提取一些信息。我想将列分为min
和max
,这可以通过使用-
之类的方法将strsplit(dat$figures,split = "-")
分成两列来完成(但我希望将其分成两列{{1} }和min
)。一旦有了这个,我想添加一个新列,无论观察值是否包含小数,它都会给我一个max
或0
。我想逐行执行此操作,某些观察包含1
,因此我对以下观察\n
的预期输出是
1.24 - 1.30\n1.22 - 1.30\n0.08 - 0.10\n0.10 - 0.12
下面的min max containsDecimal
1.24 1.30 1
1.22 1.30 1
0.08 0.10 1
0.10 0.12 1
示例如下:
32 - 39\n190 - 200\n142 - 152\n90 - 100
现在min max containsDecimal
32 39 0
190 200 0
142 152 0
90 100 0
列是containsDecimal
。我正在尝试将结果包含在该观察所在的单元格中,并用0
拆分,而不扩展。
数据:
\n
解决方法
一种可能的tidyverse解决方案是
"Foo \n Bar."
,
library(tidyverse)
dat <- mutate(dat,figs = stringr::str_split(figures,"\n")) # produces a list column. In the other words,some of the rows of `figs` column have more than one element.
dat <- unnest(dat,col = figs)
dat <- separate(dat,figs,c("min","max"),"-") # you could use convert = TRUE,to convert min and max into numeric.
dat <- mutate(dat,contains_decimal = grepl("\\.",min) & grepl("\\.",max)) # since type of min and max are characters,containing decimal mean containing literally a period.
# A tibble: 19 x 6
grp grp2 figures min max contains_decimal
<chr> <int> <chr> <chr> <chr> <lgl>
1 10016 13567 "0.55 - 0.65" "0.55… " 0.6… TRUE
2 1270 2090 "1.90 - 2" "1.90… " 2" FALSE
3 8757 12259 "6.60 - 7\n8.50 - 9.50" "6.60… " 7" FALSE
4 8757 12259 "6.60 - 7\n8.50 - 9.50" "8.50… " 9.5… TRUE
5 2589 3982 "2.75 - 3.15" "2.75… " 3.1… TRUE
6 9099 12573 "1.24 - 1.30\n1.22 - 1.30\n0.08 -… "1.24… " 1.3… TRUE
7 9099 12573 "1.24 - 1.30\n1.22 - 1.30\n0.08 -… "1.22… " 1.3… TRUE
8 9099 12573 "1.24 - 1.30\n1.22 - 1.30\n0.08 -… "0.08… " 0.1… TRUE
9 9099 12573 "1.24 - 1.30\n1.22 - 1.30\n0.08 -… "0.10… " 0.1… TRUE
10 5211 8334 "6.90 - 7.40" "6.90… " 7.4… TRUE
11 9994 13542 "2.73 - 2.78" "2.73… " 2.7… TRUE
12 2685 4113 "0.72 - 0.74\n2.75 - 2.77\n3.10 -… "0.72… " 0.7… TRUE
13 2685 4113 "0.72 - 0.74\n2.75 - 2.77\n3.10 -… "2.75… " 2.7… TRUE
14 2685 4113 "0.72 - 0.74\n2.75 - 2.77\n3.10 -… "3.10… " 3.1… TRUE
15 9778 13295 "32 - 39\n190 - 200\n142 - 152\n9… "32 " " 39" FALSE
16 9778 13295 "32 - 39\n190 - 200\n142 - 152\n9… "190 " " 200" FALSE
17 9778 13295 "32 - 39\n190 - 200\n142 - 152\n9… "142 " " 152" FALSE
18 9778 13295 "32 - 39\n190 - 200\n142 - 152\n9… "90 " " 100" FALSE
19 772 1317 "2.20 - 2.40" "2.20… " 2.4… TRUE
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。