mutate小坑踩一脚
测试开头


测试结尾
今天是生信星球陪你的第408天
大神一句话,菜鸟跑半年。我不是大神,但我可以缩短你走弯路的半年~
就像歌儿唱的那样,如果你不知道该往哪儿走,就留在这学点生信好不好~
这里有豆豆和花花的学习历程,从新手到进阶,生信路上有你有我!
dplyr里的mutate是再数据框后面新增一列。
问题

给iris$Sepal.Length
设置一个阈值,生成一个新列,例如:如果iris$Sepal.Length
大于5,新列对应的元素就等于“A”,否则就等于“B”。
形如:

代码如下
library(dplyr)
test=iris
thr=5
m=ifelse(iris$Sepal.Length>thr,"A","B")
test <- mutate(test,m)
head(test)
## Sepal.Length Sepal.Width Petal.Length Petal.Width Species m
## 1 5.1 3.5 1.4 0.2 setosa A
## 2 4.9 3.0 1.4 0.2 setosa B
## 3 4.7 3.2 1.3 0.2 setosa B
## 4 4.6 3.1 1.5 0.2 setosa B
## 5 5.0 3.6 1.4 0.2 setosa B
## 6 5.4 3.9 1.7 0.4 setosa A
统计一下AB的数量
table(test$m)
##
## A B
## 118 32
费解
理论上,阈值改变,AB的数量也会跟着改变。
实际上遇到了一个问题,当我修改thr
thr=5.5
m=ifelse(iris$Sepal.Length>thr,"A","B")
test <- mutate(test,m)
再统计一下:
table(test$m)
## m
## A B
## 118 32
这就很奇怪了,怎么阈值修改了,AB的数量却没有变化?
解决
其实AB变化了!直接统计m
table(m)
## m
## A B
## 91 59
这就说明,mutate两次是同一个列名不同内容,并不会覆盖原有内容,而是跳过了!等于没运行!
解决方法两个:
一是重新赋值test=iris
再运行,二是换代码:
test$change <- change
向大家隆重推荐隔壁生信技能树的一系列干货!
点击底部的“阅读原文”,获得更好的阅读体验哦😻
初学生信,很荣幸带你迈出第一步。
我们是生信星球,一个不拽术语、通俗易懂的生信知识平台。由于是2018年新号,竟然没有留言功能。需要帮助或提出意见请后台留言、联系微信或发送邮件到jieandze1314@gmail.com,每一条都会看到的哦~
请关注“恒诺新知”微信公众号,感谢“R语言“,”数据那些事儿“,”老俊俊的生信笔记“,”冷🈚️思“,“珞珈R”,“生信星球”的支持!