[R语言]Talk07 练习与作业

发表于 2022-01-06  209 次阅读


文章目录

练习与作业1:字符串操作


stringr包实现以下操作

使用变量: x <- c('weihua', 'chen');

  1. 每个element/成员的长度
  2. 每个成员首字母大写
  3. 取每个成员的前两个字符
  4. 合并为一个字符串,用 ', ' 间隔
  5. 数一下每个成员中元音字母 (vowel letter)的数量
```{r}
## 代码写这里,并运行;
require(tidyverse)
require(stringr)
x <- c('weihua', 'chen');
str_length(x)
str_to_title(x)
str_sub(x,1,2)
paste(x[1],x[2],sep=",")
sum(str_count(x[1],c("a","e","i","o","u")))
sum(str_count(x[2],c("a","e","i","o","u")))
```

mtcars变量作练习

  1. 筛选出所有的奔驰车(Mercedes-Benz);
  2. 筛选出所有非奔驰车;
  3. 处理行名,将其中的品牌与车型分开。比如:Mazda RX4 Wag => 'Mazda', 'RX4 Wag'
```{r}
## 代码写这里,并运行;
benz <- mtcars %>%  subset(str_detect( rownames(mtcars),"Merc")==T)
benz
notbenz <- mtcars %>% subset(str_detect( rownames(mtcars),"Merc")==F)
notbenz
str_split(rownames(mtcars)," ",2)
```

练习与作业2:regular expression 正则表达式练习


starwars变量作练习

注:需要先导入 tidyverse 包;

  1. 选出所有 skin_color 包含为 white 的人,显示其name, homeworld, speciesskin_color;注意:有些人的skin color 可为多个;
  2. 打印出所有含有ar的名字;不区分大小写;
```{r}
## 代码写这里,并运行;
starwarsrk2_1 <-  subset(starwars,str_detect(skin_color,"white")==T,
                         select=c(name,homeworld,species,skin_color))
starwarsrk2_1
subset(starwars,str_detect(name,"ar")==T,select = name)
```

用下面的vec变量作练习

vec <- c( "123", "abc", "wei555hua666" );

  1. 找出含有数字的字符串;
  2. 找出数字的位置;如果字符串含有多组数数字,只显示第一组;
  3. 找出所有数字的位置;
  4. 提取出找到的数字;如果字符串含有多组数数字,只提取第一组;
  5. 提取所有的数字;
  6. 将数字替换为 666;
```{r}
## 代码写这里,并运行;
vec <- c( "123", "abc", "wei555hua666" );
vec[grep( "\\d+",vec )]
vec %>% str_locate("\\d+")
vec %>% str_locate_all("\\d+")
vec %>% str_extract("\\d+")
vec %>% str_extract_all("\\d+")
str_replace( vec, "\\d+", "666");
```

练习与作业3:探索题


序列分析

用序列:seq <- "ATCTCGGCGCGCATCGCGTACGCTACTAGC" 实现以下分析;注:可使用任何包:

  1. 得到它的反向互补序列;
  2. 计算它的GC含量,用百分数表示;
  3. 把它拆分成一个个codon(即三个nucleotide形成一个codon;最后一个长度可以不为3;
```{r}
## 代码写这里,并运行;
seq <- "ATCTCGGCGCGCATCGCGTACGCTACTAGC"
from=c("A","T","G","C")
to  =c("T","A","C","G")
names(to)=from
sep_seq=unlist(strsplit(seq,""))
complementary_seq=to[sep_seq]
rev_complementary=rev(complementary_seq)
rev_complementary_seq=paste(rev_complementary,collapse = "")
rev_complementary_seq
GCin <- sum(str_count(seq,c("G","C")))/str_length(seq) *100
GCin
str_sub(seq,c(seq(1,str_length(seq)-2,3)),c(seq(3,str_length(seq),3)))
```

问答

问:stringr::str_pad 的作用是什么?请举例回答

答:将字符串填充到指定长度

```{r}
example1 <-"This is an example"
str_pad(example1,30,side = 'both',pad = "*")
```
本站文章基于国际协议BY-NC-SA 4.0协议共享;
如未特殊说明,本站文章皆为原创文章,请规范转载。

0