mutate小坑踩一脚

dplyr里的mutate是再数据框后面新增一列。

问题

mutate小坑踩一脚_第1张图片

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

mutate小坑踩一脚_第2张图片

代码如下

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

你可能感兴趣的:(mutate小坑踩一脚)