精华内容
下载资源
问答
  • 使用R语言筛选数据中的重复行

    千次阅读 2020-08-07 13:11:47
    但这个过程如何用R语言实现?笔者近期对这个问题进行了探索。 我们首先虚拟一个数据,并将这个数据保存为CSV文件,命名为: ![在这里插入图片描述]...

    在进行数据的预处理时,我们常常关注有无重复数据,如果两行数据完全一致,则可能存在数据的重复录入等情况,此时就要对这两行数据进行核实。但这个过程如何用R语言实现?笔者近期对这个问题进行了探索。

    我们首先虚拟一个数据,并将这个数据保存为CSV文件,命名为"a.csv“,数据如下图:
    在这里插入图片描述

    我们首先读入数据,并查看数据读入是否正确:

    a<-read.csv("a.csv")
    head(a) 
    

    R语言里有一个判断重复值的函数duplicated,可以分别运行如下三行程序,分别输出每一行数据和前面是否是重复的,重复数据,重复数据所在的行:

    duplicated(a)
    a[duplicated(a),]
    which(duplicated(a))
    

    但上面这段代码存在的问题是,只能找到第二次及以后出现的数据,我们并不能找到这行数据第一次出现的位置。

    对重复数据的理解状态是输出所有的重复数据及所在的行,再进行判断,这就需要写出来相应的代码去实现。具体的思路是先找出重复的行,赋值到数据框b中,然后判断b的每一行和a是否重复,经过尝试,代码如下:

    b<-a[duplicated(a[duplicated(a),]),]
    
    for (i in c(1:nrow(b))){
      for (j in c(1:nrow(a))){
        if (sum(b[i,] == a[j,]) == ncol(a)){
          print(a[j,])
          print(paste( "In the row", j))
          }
       }
    }
    

    输出的结果如下:
    在这里插入图片描述

    展开全文
  • R语言筛选V2和V3两列中,元素的重复次数超过2次以上的数据,其中2和3的重复次数超过3次,需要筛选出来。筛选不同门店的数量,进行数据计数和统计。

    思想:将读取的数据当做数据库中的数据表,读取的数据放置到数据内存中临时存储,以SQL语句对数据进行筛选,得出想要的数据内容。

    数据情况

    筛选V2和V3两列中,元素的重复次数超过2次以上的数据,其中2和3的重复次数超过3次,需要筛选出来。
    在这里插入图片描述

    其中:找出V2和V3 同时重复大于3

    筛选数据R语言程序

    library(sqldf)
    data <- read.csv("data.csv")
    head(data)
    zdata <- sqldf("select * from data t where (select count(1) from data where V2 = t.V2 and V3 = t.V3)>2")
    print(zdata)
    

    方法一: 使用的SQL语句为:

    select * from data t where (select count(1) from data where V2=t.V2 and V3=t.V3)>2

    得到晒选的效果如下所示:

    在这里插入图片描述

    方法二:提取查询

    在这里插入图片描述
    v1=c(1,21,5,5,8,8)
    v2=c(2,5,2,8,2,2)
    v3=c(3,6,3,9,3,3)
    v4=c(4,7,3,4,7,4)
    data=data.frame(v1,v2,v3,v4)
    head(data)
    datav2v5=paste(datav2v5=paste(datav2,datav5)a=table(datav5) a=table(datav2v5)
    tarid=names(a)[a>2]
    res=data[data$v2v5%in%tarid,]
    print(res)

    在这里插入图片描述

    方法三:条件筛选subset

    a1 <- c("M","b","b","c")
    b1 <- c(1,2,3,4)
    da <- cbind(a1,b1)
    da <- as.data.frame(da)
    
    print(da)
    mz <- subset(da,a1=='b'&b1==2) 
    print(mz)
    

    在这里插入图片描述

    方法四:which条件查询

    a1 <- c("M","b","b","c")
    b1 <- c(1,2,3,4)
    da <- cbind(a1,b1)
    da <- as.data.frame(da)
    print(da)
    zda<-da[which(a1 == 'b'),]
    print(zda)
    

    在这里插入图片描述

    案例一:门店营业额业务数据筛选判断

    找出历史门店中累计营业额有25天的日营业额大于3的订单数量门店。
    在这里插入图片描述
    1.对一天中不同的门店的订单数量进行统计。找出每一天中不同门店的订单数量

    install.packages("sqldf")
    library(sqldf)
    AA=read.csv("C:\\Users\\Administrator\\Desktop\\data.csv")
    str(AA)
    data1=sqldf("select 门店,日期,count(1) as 当日订单数 from AA group by 日期,门店")
    

    2.对每一天中,不同门店的订单数量进行判断,找出每天门店的订单数量大于三的门店。

    data2=sqldf("select 门店,日期,count(1) as 当日订单数 from AA group by 日期,门店 having 当日订单数>=3")
    

    3.对每天门店数量大于3的门店进行统计,找出连续一个月中,每天门店数量大于3的门店,在一个月中的营业额次数累计大于等于25天的门店。

    data3=sqldf("select 门店,count(1) as 月订单数量大于3的天数 from (select 门店,日期,count(1) as 当日订单数 from AA group by 日期,门店 having 当日订单数>=3) group by 门店 having 月订单数量大于3的天数>=25")
    

    案例二: 数据筛选合并

    原始数据如下:

    key time
    a 1月
    a 1月
    a 2月
    b 1月
    b 1月
    b 1月

    合并数据如下:

    key time count
    a 1月 2
    a 2月 1
    b 1月 3

    实现代码如下:

    key=c("a","a","a","b","b","b")
    time=c("1月","1月","2月","1月","1月","1月")
    data=cbind(key,time)
    data=as.data.frame(data)
    
    data
    library(sqldf)
    
    zdata=sqldf("select key,time,count(1) from data group by key,time")
    print(zdata)
    

    在这里插入图片描述

    案例三:提取指定内容数据

    提取数据框中的a1列数据包含内容为b的所有数据。

    a1=c("M","b","b","c")
    b1=c(1,2,3,4)
    da=cbind(a1,b1)
    da=as.data.frame(da)
    print(da)
    m=da[da$a1=='b',]
    print(m)
    

    在这里插入图片描述

    案例四:R语言对两列中不重复元素数据进行计数

    数据情况:

    slon是经度,slat是维度,找出以两列中非重复数据累计出现的次数,(即不同的位置的个数,即统计出不同位置下(slon,slat)出现的次数)。
    在这里插入图片描述

    统计出a,b对应出现过多少次,1,2出现次数,2,3出现过多少次,等等
    方法如下:

    统计不同的(a,b)出现次数,对a和b进行合并,对a&b进行计数,即得到不同的(a,b)出现次数的结果值,如下所示:

    aax$freq <- paste(aax$slon,aax$slat,sep=',')
    table(aax$freq)
    

    统计效果如下所示:
    在这里插入图片描述

    不同位置数据统计详细过程方法如下

    原始数据展示如下,统计slon和slat

    aax=dat1  
    
    print(aax)
    

    运行得到结果如下:
    在这里插入图片描述

    两列数据合并成一列,合并slon和slat,生成新的一列freq

    aax$freq <- paste(aax$slon,aax$slat,sep=',')  ## 两列数据合并成一列
    head(aax)
    

    运行得到结果如下:
    在这里插入图片描述

    table统计新生成的一列,并将统计结果转换为数据框形式展示

    dax=as.data.frame(table(aax$freq))
    
    head(dax)
    

    运行得到结果如下:
    在这里插入图片描述

    对统计的结果Var1变量进行拆分成两列,还原slat和slon,展示统计结果

    re <- strsplit(as.character(dax$Var1),",")
    
    for(i in 1:dim(dax)[1])
     {
    dax$slon[i] <- re[[i]][1]
    dax$slat[i] <- re[[i]][2]
    }
    
    head(dax)
    

    运行得到结果如下:
    在这里插入图片描述

    展开全文
  • dplyr软件包是R中功能最强大,最受欢迎的软件包之一。该软件包由最受欢迎的R程序员Hadley Wickham编写,他编写了许多有用的R软件包,如ggplot2,tidyr等。本文包括一些示例和如何...简而言之,它使得R中的数据探索和...

    dplyr软件包是R中功能最强大,最受欢迎的软件包之一。该软件包由最受欢迎的R程序员Hadley Wickham编写,他编写了许多有用的R软件包,如ggplot2,tidyr等。本文包括一些示例和如何使用使用dplyr软件包来清理和转换数据。这是一个关于数据操作和数据处理的完整教程。

    什么是dplyr?

    dplyr是一个强大的R软件包,用于处理,清理和汇总非结构化数据。简而言之,它使得R中的数据探索和数据操作变得简单快捷。

    dplyr有什么特别之处?

    软件包“dplyr”包含许多主要使用的数据操作功能,例如应用过滤器,选择特定列,排序数据,添加或删除列以及聚合数据。这个包的另一个最重要的优点是学习和使用dplyr函数非常容易。也很容易回想起这些功能。例如,filter()用于过滤行。dplyr函数处理速度比基本R函数快。 这是因为dplyr函数是以计算有效的方式编写的。 它们在语法上也更稳定,并且比向量更好地支持数据帧。以下是该包中的方法与用途:

    dplyr

    Function

    Description

    Equivalent SQL

    select()

    Selecting

    columns (variables)

    SELECT

    filter()

    Filter (subset) rows.

    WHERE

    group_by()

    Group the data

    GROUP BY

    summarise()

    Summarise (or aggregate) data

    -

    arrange()

    Sort the data

    ORDER BY

    join()

    Joining data frames (tables)

    JOIN

    mutate()

    Creating New Variables

    COLUMN ALIAS

    dplyr中主要方法的使用

    filter系列:筛选出自己想要的数据

    #安装与加载包

    #直接使用内置的iris、mtcars数据集来演示

    #iris数据集中,筛选Species为“setosa”,并且Sepal.Length大于5的样本

    #"&"也可以替换成“,”

    >filter(iris, Species == "setosa" & Sepal.Length >= 5.5)

    Sepal.Length Sepal.Width Petal.Length Petal.Width Species

    1          5.8         4.0          1.2         0.2  setosa

    2          5.7         4.4          1.5         0.4  setosa

    3          5.7         3.8          1.7         0.3  setosa

    4          5.5         4.2          1.4         0.2  setosa

    5          5.5         3.5          1.3         0.2  setosa

    filter支持以下几种判断形式:

    关系类型:、 >=、==、!=、is.na()、 !is.na()

    &、 |、 !、 xor() #针对向量集的操作判断

    between()、%in%、 near() #sqrt(2) ^ 2 == 2 返回FALSE,near(sqrt(2) ^ 2, 2)则TRUE

    all_vars()、any_vars() #出现于filter_all、filter_at、filter_if中,作为判断条件

    filter系列,还有几个变异函数:filter_all、filter_at、filter_if

    #筛选任何变量>150的样本

    filter_all(mtcars, any_vars(. > 150))

    #筛选变量以“d”结尾,并且变量 "%%2" 等于0

    filter_at(mtcars, vars(starts_with("d")), any_vars((. %% 2) == 0))

    # 筛选变量向下取整 == 原变量数值, 并且这部分变量的数值!= 0 的样本集

    filter_if(mtcars, ~ all(floor(.) == .), all_vars(. != 0))

    更多用法:

    mtcars %>% filter_all(all_vars(.>150)) %>% head() # 筛选所有变量均大于150的行,结果为空

    mtcars %>% filter_all(any_vars(.>150)) %>% head() # 筛选存在变量大于150的行,

    # 针对变量名称为d开头的所有列,筛选存在变量能整除2的所有行

    mtcars %>% filter_at(vars(starts_with("d")), any_vars((.%% 2) == 0))

    # 针对变量全为整数的列,筛选所有变量非0的所有行

    mtcars %>% filter_if(~all(floor(.) == .), all_vars(.!= 0))

    # 支持purrr语法筛选

    mtcars %>% filter_at(vars(hp, vs), ~ .%% 2 == 0) # 筛选hp和vs变量都是偶数的所有行

    select 函数:仅保留你所需要的列,并支持修改变量名称

    用法:select(.data, …)

    与之前讲解的filter有所不同,select是筛选变量的,而filter是筛选样本集。

    应用场景:假设数据存于宽表中(比如有100个变量的表),而你仅需要其中几个变量。而select的关键在于”…“的判断条件

    #mtcars数据集中,筛选mpg、cyl、wt、vs,4个变量数据

    #mtcars[,c("mpg","cyl","wt","vs")],可以实现相同的功能

    >select(mtcars,c("mpg","cyl","wt","vs"))

    mpg cyl    wt vs

    21.0   6 2.620  0

    21.0   6 2.875  0

    22.8   4 2.320  1

    #Tips:select 同样支持":"与"-"操作

    #比如:select(mtcars,c("mpg":"vs"))、表示连续的列选择

    #select(mtcars,-"mpg") 删除mpg列

    以上给人感觉,不通过select,利用数据框与向量操作,同样可以做到,select 真正强大的地方在于,支持以下几种条件判断:

    包含关系:starts_with()、 ends_with()、 one_of()

    匹配关系:matches()、contains()、num_range()

    #包含关系:在Iris中,筛选以Petal开头,或Width结尾的变量

    >select(iris, starts_with("Petal"), ends_with("Width"))

    #Petal.Length Petal.Width Sepal.Width

    #1.4         0.2         3.5

    #1.4         0.2         3.0

    #1.3         0.2         3.2

    #...(数据省略)

    #Tips:starts_with("Petal"), ends_with("Width"),2个条件不是 "且" 的关系,而是 "或"

    #包含关系:经常需要提取变化的数据集合,利用one_of再合适不过了

    #提取mtcars中,"mpg","cyl","wt","vs" ,"vss"

    >var1 

    >select (mtcars, one_of(var1))

    #mpg cyl    wt vs

    #21.0   6 2.620  0

    #21.0   6 2.875  0

    #2.8   4 2.320  1

    #...(省略数据)

    #Warning message: Unknown columns: `vss`

    #Tips: select没找到额变量,系统会返回警告

    #匹配关系:筛选Iris数据集,变量名中带有"wid"的变量名

    >select(iris, matches(".wid."))

    >select(iris, contains("wid"))

    #Sepal.Width Petal.Width

    #3.5         0.2

    #3.0         0.2

    #num_range能高效匹配变量名称类似x01, x02, x03的

    #随机数据框,由X1~X5,y 组成:

    df 

    x3= runif(10), x4= runif(10),

    x5= runif(10), y= letters[1:10])

    #筛选 y, x1:x3的变量,并且把y重命名为 var1

    >select(df, c(var1 = "y", num_range("x", 1:3)))

    #var1  x1         x2        x3

    #a 0.96631605 0.29815009 0.6545414

    #b 0.61046600 0.76547552 0.8247191

    #c 0.70510879 0.46636723 0.4472588

    #... (数据省略)

    mutate系列:对数据进行计算产生新数据

    用法:mutate(.data, …)

    mutate的使用方式,主要是依靠"…"的公式变化,生成新的变量

    mutate支持以下几种公式 :

    +、-、*、÷ 、%%、%|% 等常用计算方式

    lead()、 lag()

    dense_rank(), min_rank(), percent_rank(), row_number(), cume_dist(), ntile()

    cumsum(), cummean(), cummin(), cummax(), cumany(), cumall()

    na_if(), coalesce()

    if_else(), recode(), case_when()

    先从"rank"系列开始介绍,这一函数类,主要是用来划分名次、等级、百分比、密度等等

    #############简单的+、-、*、÷ 、%%、%|%   可以增加新的数据列

    >mutate(mtcars,aa=hp-drat,bb=mpg*cyl)

    mpg cyl  disp  hp drat    wt  qsec vs am gear carb     aa    bb

    1  21.0   6 160.0 110 3.90 2.620 16.46  0  1    4    4 106.10 126.0

    2  21.0   6 160.0 110 3.90 2.875 17.02  0  1    4    4 106.10 126.0

    3  22.8   4 108.0  93 3.85 2.320 18.61  1  1    4    1  89.15  91.2

    4  21.4   6 258.0 110 3.08 3.215 19.44  1  0    3    1 106.92 128.4

    5  18.7   8 360.0 175 3.15 3.440 17.02  0  0    3    2 171.85 149.6

    6  18.1   6 225.0 105 2.76 3.460 20.22  1  0    3    1 102.24 108.6

    7  14.3   8 360.0 245 3.21 3.570 15.84  0  0    3    4 241.79 114.4

    #######如果只想保留这些新的变量可以:

    >transmute(mtcars,aa=hp-drat,bb=mpg*cyl)

    aa    bb

    1  106.10 126.0

    2  106.10 126.0

    3   89.15  91.2

    4  106.92 128.4

    5  171.85 149.6

    6  102.24 108.6

    ##########percent_rank,按照[0,1]百分比的形式进行排序

    #举例说明,按照x的数值,按照百分比进行划分

    percent_rank(x)

    #[1] 1.00 0.00 0.50 0.25 0.75

    #这类函数比较适用于 ,需要排名次的场景。比如考试、比赛...

    #比如根据iris中的Sepal.Length,进行百分比表示, 其中 %>% 管道的标识符,select函数中,everything()可以用来更换变量顺序

    >iris %>% mutate(Length_rank = percent_rank(Sepal.Length)) %>% select(Length_rank,everything())

    #Length_rank Sepal.Length Sepal.Width Petal.Length Petal.Width Species

    #0.21476510          5.1         3.5          1.4         0.2  setosa

    #0.10738255          4.9         3.0          1.4         0.2  setosa

    #...(数据省略)

    #row_number(),不仅可以用来对想来排序,也可以表示获取行数

    mutate(mtcars, row_number() == 1L) # 新生成的变量,用来判断是否是第一行,返回TRUE 或者 FALSE

    mtcars %>% filter(between(row_number(), 1, 10)) # 通过row_number,筛选1-10行.有点类似 top_n(10)

    #ntile,切割数据集为N块,返回具体的数值,属于等分切割

    ntile(runif(10), 5)

    #[1] 1 2 4 5 5 3 4 2 3 1

    #某种程度上,ntile可以用来划分训练集和测试集(类似sample函数)

    #ind 

    #mtcars[ind == 1,]

    #备注:ntile对数据框使用的时候,如果没有特殊标明具体的数据列,ntile会对所有的列进行切割操作

    再说一下"cum"函数系列,这类函数计算累积指标,比如截止到某一天的平均值、总和、乘积等等。

    # cumsum,累积相加的数值

    cumsum(1:10)

    # 1  3  6 10 15 21 28 36 45 55

    # 原数据集有N个,返回也是N个

    # 类似MS_SQL中的sum(s)over(order by y)

    # cumany(), cumall(),则是逻辑判断,并非计算数值

    cumall(-5:5)

    # TRUE  TRUE  TRUE  TRUE  TRUE FALSE FALSE FALSE FALSE FALSE FALSE

    # 返回的是逻辑值,0代表FALSE

    最后说一下"判断"函数系列,这类函数应用比较广泛。

    比如生活中,当天空下雨了,小明就打伞了

    类似EXCEL中的 if函数,vlookup函数等等

    # if_else

    # 用法:if_else(condition, true, false, missing = NULL),比传统的ifelse多了一个missing参数

    # 并且if_else能保留原数据的数据类型,不会降维操作

    # 假设x >= 0,则 y-1,y 

    df 

    df %>% mutate( xy = if_else(x >= 0, y -1, y+1, y))

    #     x         y         xy

    #   -5    0.7760150  1.7760150

    #   -4    0.9310976  1.9310976

    # case_when中,判断的条件可以更加的多样化

    # case_when,与SQL中的case...when...一样

    # 同C语言中的switch一样

    case_when(

    x %% 2 == 0 ~ "偶",

    x %% 2 == 1 ~ "奇",

    TRUE ~ as.character(x)

    #可以设置一个默认值

    )

    "奇" "偶" "奇" "偶" "奇" "偶" "奇" "偶" "奇" "偶" NA

    arrange 用于数据排序

    arrange() 函数以行为单位进行排序,默认为升序排列,降序使用 desc( ) 函数。第一个参数为数据集名称,后面为排序依据变量。

    > arrange(mtcars,hp,mpg,cyl )

    mpg cyl  disp  hp drat    wt  qsec vs am gear carb

    1  30.4   4  75.7  52 4.93 1.615 18.52  1  1    4    2

    2  24.4   4 146.7  62 3.69 3.190 20.00  1  0    4    2

    3  33.9   4  71.1  65 4.22 1.835 19.90  1  1    4    1

    4  27.3   4  79.0  66 4.08 1.935 18.90  1  1    4    1

    5  32.4   4  78.7  66 4.08 2.200 19.47  1  1    4    1

    6  26.0   4 120.3  91 4.43 2.140 16.70  0  1    5    2

    7  22.8   4 108.0  93 3.85 2.320 18.61  1  1    4    1

    8  22.8   4 140.8  95 3.92 3.150 22.90  1  0    4    2

    9  21.5   4 120.1  97 3.70 2.465 20.01  1  0    3    1

    10 18.1   6 225.0 105 2.76 3.460 20.22  1  0    3    1

    多列排序,降序用desc()

    > arrange(mtcars,desc(hp),mpg,cyl )

    mpg cyl  disp  hp drat    wt  qsec vs am gear carb

    1  15.0   8 301.0 335 3.54 3.570 14.60  0  1    5    8

    2  15.8   8 351.0 264 4.22 3.170 14.50  0  1    5    4

    3  13.3   8 350.0 245 3.73 3.840 15.41  0  0    3    4

    4  14.3   8 360.0 245 3.21 3.570 15.84  0  0    3    4

    5  14.7   8 440.0 230 3.23 5.345 17.42  0  0    3    4

    6  10.4   8 460.0 215 3.00 5.424 17.82  0  0    3    4

    7  10.4   8 472.0 205 2.93 5.250 17.98  0  0    3    4

    8  15.2   8 275.8 180 3.07 3.780 18.00  0  0    3    3

    9  16.4   8 275.8 180 3.07 4.070 17.40  0  0    3    3

    10 17.3   8 275.8 180 3.07 3.730 17.60  0  0    3    3

    sample_n() and sample_frac()按行随机选取数据子集

    sample_n() and sample_frac() 分别是按固定多少行随机选取,一个是按行数的比例选取;

    > sample_n(mtcars,10)

    mpg cyl  disp  hp drat    wt  qsec vs am gear carb

    1  18.7   8 360.0 175 3.15 3.440 17.02  0  0    3    2

    2  14.3   8 360.0 245 3.21 3.570 15.84  0  0    3    4

    3  21.5   4 120.1  97 3.70 2.465 20.01  1  0    3    1

    4  32.4   4  78.7  66 4.08 2.200 19.47  1  1    4    1

    5  26.0   4 120.3  91 4.43 2.140 16.70  0  1    5    2

    6  19.2   6 167.6 123 3.92 3.440 18.30  1  0    4    4

    7  17.8   6 167.6 123 3.92 3.440 18.90  1  0    4    4

    8  27.3   4  79.0  66 4.08 1.935 18.90  1  1    4    1

    9  15.8   8 351.0 264 4.22 3.170 14.50  0  1    5    4

    10 15.5   8 318.0 150 2.76 3.520 16.87  0  0    3    2

    > sample_frac(mtcars,0.1)

    mpg cyl disp  hp drat   wt  qsec vs am gear carb

    1 10.4   8  472 205 2.93 5.25 17.98  0  0    3    4

    2 14.3   8  360 245 3.21 3.57 15.84  0  0    3    4

    3 13.3   8  350 245 3.73 3.84 15.41  0  0    3    4

    %>% 数据管道综合运用举例

    data(iris)

    data(mtcars)

    iris %>% head()

    mtcars %>% head()

    # 筛选变量名为字符串开头的变量

    iris %>% select(starts_with("Sepal")) %>% head()

    # 多个筛选条件

    iris %>% select(-starts_with("Sepal")) %>% head()

    # 筛选变量名为字符串结尾的变量

    iris %>% select(ends_with("Length")) %>% head()

    iris %>% select(-ends_with("Length")) %>% head()

    # 将变量Species移动到最前面

    iris %>% select(Species, everything()) %>% head()

    # 反筛选,筛选除了Sepal.Length变量的其它变量

    iris %>% select(-Sepal.Length) %>%head()

    # 将变量Species移动到最后面

    iris %>% select(everything(), Species) %>% head()

    iris %>% select(-Species, Species) %>% head()

    # 错误的用法,结果为空

    iris %>% select(Species, -Species) %>% head()

    iris %>% select(contains("etal")) %>% head()

    iris %>% select(matches(".t.")) %>% head() # 筛选名称中,t在中间的变量。

    iris %>% select(last_col()) %>% head()# 最后一个变量

    iris %>% select(last_col(offset = 2)) %>% head() # 倒数第3个变量

    iris %>% select(one_of(c("Petal.Length", "Petal.Width"))) %>% head()

    iris %>% group_by(Species) %>% select(group_cols()) %>% distinct() %>% head() # 获取分组变量名

    df % as_tibble()

    head(df)

    df %>% select(V4:V7) %>% head() # 筛选V4列到V7列

    df %>% select(num_range("V", 4:7)) %>% head() # 结果与前面一样

    #列名重命名

    iris %>% select(petal_length = Petal.Length) %>% head() # 重命名

    iris %>% select(obs = starts_with('S')) %>% head() # 多个变量重命名

    更多生物信息课程:

    1. 文章越来越难发?是你没发现新思路,基因家族分析发2-4分文章简单快速,学习链接:基因家族分析实操课程、基因家族文献思路解读

    2. 转录组数据理解不深入?图表看不懂?点击链接学习深入解读数据结果文件,学习链接:转录组(有参)结果解读;转录组(无参)结果解读

    3. 转录组数据深入挖掘技能-WGCNA,提升你的文章档次,学习链接:WGCNA-加权基因共表达网络分析

    9.组学大讲堂全部生物生信数据挖掘课程可点击:组学大讲堂视频课程

    展开全文
  • R语言数据筛选match

    万次阅读 2018-12-09 13:27:37
    数据筛选是在分析中最常用的步骤,如微生物组分析中,你的OTU表、实验设计、物种注释之间都要不断筛选,来进行数据对齐,或局部分析。 今天来详解一下此函数的用法。 match match:匹配两个向量,返回x中存在的返回...

    数据筛选是在分析中最常用的步骤,如微生物组分析中,你的OTU表、实验设计、物种注释之间都要不断筛选,来进行数据对齐,或局部分析。

    今天来详解一下此函数的用法。

    match

    match:匹配两个向量,返回x中存在的返回索引或TRUE、FALSE

    match函数使用格式有如下两种:

    第一种方便设置参数,返回x中元素在table中的位置

    match(x, table, nomatch = NA_integer_, incomparables = NULL)
    

    第二种简洁,返回x中每个元素在table中是否存在

    x %in% table
    

    参数详解

    • x: 向量, 要匹配的值;
    • table: 向量, 被匹配的值;
    • nomatch: 没匹配上的返回值, 必须是整数;
    • incomparables: 指定不能用来匹配的值.

    match函数是一个完全匹配函数, 当两个元素类型不一样时, 如果进行类型转换后匹配得上的话, 则仍可匹配, 可看下例.

    匹配上且返回位置

    match(c(1, "TRUE"), c(T, 0, "1"))
    

    返回3 1,即1位于表中的3号位,TRUE位于1号位,且T和TRUE可匹配成功

    c(1, "TRUE", F) %in% c(T, 0, "1")
    

    返回TRUE TRUE FALSE,表示每个元素在table中是否存在

    pmatch

    pmatch函数是一个部分匹配函数, 依次从x里面挑出元素, 对照table进行匹配, 若匹配上则剔除匹配上的值, 不再参与下次匹配, duplicate.ok可设置是否剔除; 对于某一个元素, 匹配一共分成三步:

    1. 如果可以完全匹配, 则认为匹配上了, 返回table中的位置;
    2. 不满足上述条件, 如果是唯一部分匹配, 则返回table中的位置;
    3. 不满足上述条件, 则认为没有值与其匹配上.

    pmatch函数的格式

    pmatch(x, table, nomatch = NA_integer_, duplicates.ok = FALSE)

    • x: 向量, 要匹配的值;
    • table: 向量, 被匹配的值;
    • nomatch: 没匹配上的返回值, 必须是整数;
    • duplicates.ok: table里面的元素是否可以适用多次.

    默认不允许重复使用table中元素,返回位置1 2 3

    pmatch(rep(1, 3), rep(1, 5))
    

    允许重复,返回位置1 1 1

    pmatch(rep(1, 3), rep(1, 5), duplicates.ok = TRUE)
    

    猜你喜欢

    写在后面

    为鼓励读者交流、快速解决科研困难,我们建立了“宏基因组”专业讨论群,目前己有国内外2600+ 一线科研人员加入。参与讨论,获得专业解答,欢迎分享此文至朋友圈,并扫码加主编好友带你入群,务必备注“姓名-单位-研究方向-职称/年级”。技术问题寻求帮助,首先阅读《如何优雅的提问》学习解决问题思路,仍末解决群内讨论,问题不私聊,帮助同行。
    image

    学习扩增子、宏基因组科研思路和分析实战,关注“宏基因组”
    image

    image

    点击阅读原文,跳转最新文章目录阅读
    https://mp.weixin.qq.com/s/5jQspEvH5_4Xmart22gjMA

    展开全文
  • 按照列名筛选数据R语言 先定义一个简单的数据框 a<-c("a","b","c","d") b<-c("1","2","3","4") c<-c("spring","summer","autumn","winter") d<-c("2","4","6","8") data<-data.frame(a,b,c,d) ...
  • #工作目标:读取csv文件,并筛选出平均收缩压120~139或舒张压80~89的患者(根据2010年中国高血压指南)
  • R语言筛选匹配数据

    千次阅读 2015-11-06 21:33:21
    with(mydata,mydata[which(brandName %in% c("奥迪","丰田")),])
  • R语言数据筛选、汇总、重构

    万次阅读 2018-05-24 16:36:03
    最近学习的知识点总结如下:3.1 去掉多余的数据
  • r语言筛选

    千次阅读 2019-11-07 21:03:02
    数据格式如下: a b c d e 1 2 3 4 5 使用select过滤不要的列 df[,-which(names(df)%in%c("a","b")] subset(df,select=-c(a,b)) 使用select选择想要的列 df[ , c("x","y")] subset(df, ...
  • 参考链接:R语言数据的查询筛选-subset()​www.jianshu.comR语言数据的查询筛选-subset()​www.jianshu.comsubset(x, subset, select, drop = FALSE, ...)&多条件查询 select 显示指定列 selectresult=subset...
  • R语言中的数据筛选索引

    万次阅读 2016-12-31 23:54:05
    R数据筛选方法综述 利用整数下标形式索引 x=c(1:10) x ## [1] 1 2 3 4 5 6 7 8 9 10 x[4] ## [1] 4 x[1:3] ## [1] 1 2 3 x[-3] ## [1] 1 2 4 5 6 7 8 9 10 x[-c(1:3)] ## [1] 
  • 问题如下: 假如有一列向量v1=c('a','c','e'),和数据框df1 <p>df1= A B  a 1  a 2  b 1  b 2 ...R语言小白新人,麻烦各位了</p>
  • 操作数据利用R语言完成与Excel透视表或sql语句的功能,将从条件筛选、排序、分组聚合等几个方面记录R的实现方式。与sql相比,用R实现相同功能的好处:代码量极大减少当逻辑复杂时,R可以按照顺序一步步实现,无需...
  • 本节书摘来自华章出版社《R语言数据分析》一书中的第3章,第3.1节,作者盖尔盖伊·道罗齐(Gergely Daróczi),潘怡 译,更多章节内容可以访问云栖社区“华章计算机”公众号查看。 第3章 数据筛选和汇总 当我们从...
  • R语言数据集分组大型数据集通常是高度结构化的,结构使得我们可以按不同的方式分组,有时候我们需要关注单个组的数据片断,有时需要聚合不同组内的信息,并相互比较。一、日期分组1、关于时间的包都有很多很好的...
  • 》、《如何使用Excel对数据进行筛选?》等。处理简单问题时,使用Excel效率会很高,但有些时候需要对数据进行较为复杂的分类汇总,使用Excel非常“不自由”,则需要个性化程度较高的R。这里主要推荐使用dplyr包对...
  • 这里有两个数据框,两者有相同的列(ID),这里想把第一个数据框,按照第二个数据框的ID列进行提取,顺序和第二个数据框一致。 数据框1 > tt = data.frame(id = 1:10,y = rnorm(10)) > tt id y 1 1 0.7264999...
  • 简单随机抽样(R自带函数) sample(x, size, replace = FALSE, prob = NULL) sample.int(n.size = n, replace = FALSE, prob = NULL) 分层抽样(来自DescTools包和sampling包) Strata(x,stratanames = NULL, ...

空空如也

空空如也

1 2 3 4 5 ... 15
收藏数 294
精华内容 117
关键字:

r语言筛选数据