R包dplyr——数据处理必备神器

2022-12-25  本文已影响0人  重拾生活信心

用列名进行筛选。

  • 巧用以下符号
    • ":"该符号表示用于选择一系列的变量。
    • "!":表示取反操作的,类似于在 df 中不选择某列,比如 df[,-1],表示不选择第一列
    • "&":表示逻辑运算符“与”,表示“且”的意思。A&B,表示满足条件 A,且满足条件 B
    • "|":表示逻辑运算符“或”,表示“或”的意思。A|B,表示满足条件 A 或者满足条件 B 就可以了,通常具有短路操作。
    • "c()":就是表示列的组合,其实就是向量,元素可为数字或者字符串。
    • "-" :去除
  • 下面还有几个比较重要的函数,可以作为 select 选择列的参数来使用。
    • last_col() : 表示选择最后一列。
    • starts_with():表示以什么开头的列。
    • ends_with():表示以什么结尾的列。
    • contains():表示某列是否包含什么内容。
    • one_of():选择字符向量中的列,select中不能直接使用字符向量筛选,需要使用one_of函数.
    • everything:一般用于调整列顺序,把a列放到最前面
      select(iris, a, everything())

保留所有的列,只对给定的列重新命名。原数据集行名称会被过滤掉。

rename(data,new_name= old_name)

#重命名列Petal.Length,返回子数据集只包含重命名的列
select(iris, petal_length = Petal.Length)
#重命名所有以Petal为前缀的列,返回子数据集只包含重命名的列
select(iris, petal = starts_with("Petal"))
#重命名列Petal.Length,返回全部列
rename(iris, petal_length = Petal.Length)

  #选取第一行数据
slice(mtcars, 1L)
filter(mtcars, row_number() == 1L)
#选取最后一行数据
slice(mtcars, n())
filter(mtcars, row_number() == n())
#选取第5行到最后一行所有数据
slice(mtcars, 5:n())
filter(mtcars, between(row_number(), 5, n()))


mutate():产生新的列,保留旧的列。
新变量名 ,计算并赋值给变量名

transmute()只返回扩展的新变量。原数据集行名称会被过滤掉。

    df%>%
    select(cyl,gear,wt)%>%
    mutate(cyl2=cyl*2,gear4=gear*4,
                    wt=NULL #将值设置为NULL,可将这列删除
                    )%>%
    head()
    ##cyl 和 gear 还在
    ## 新增列的位置:.before | .after
    #假如想指定这些新增加的列放在哪个列之前或者之后,使用 .before=原来df中的某个列名,可以将新增加列,放在原来的那个列名前面,注意before参数前面有个点!!,.after表示放在某个列之后。

常用结合函数

  • Center: mean(),median()
  • Spread:sd(), IQR() , mad()
  • Range:min() ,max(), quantile()
  • Position: first(), last(), nth()
  • Count: n() ,n_distinct()
  • Logical :any() ,all()

group_by()用于对数据集按照给定变量分组,返回分组后的数据集。对返回后的数据集使用以上介绍的函数时,会自动的对分组数据操作。

group_by() 后,数据外观不变。(与 summarize()联用,分组统计描述。)

#使用变量cyl对mtcars分组,返回分组后数据集
by_cyl <- group_by(mtcars, cyl)
#返回每个分组中最大disp所在的行
filter(by_cyl, disp == max(disp))
#返回每个分组中变量名包含d的列,始终返回分组列cyl
select(by_cyl, contains("d"))
#使用mpg对每个分组排序
arrange(by_cyl,  mpg)
#对每个分组无重复的取2行记录
sample_n(by_cyl, 2)



#使用变量cyl对mtcars分组,然后对分组后数据集使用聚合函数
by_cyl <- group_by(mtcars, cyl)
#返回每个分组的记录数
summarise(by_cyl, n())
#求每个分组中disp和hp的均值
summarise(by_cyl, mean(disp), mean(hp))
#返回每个分组中唯一的gear的值
summarise(by_cyl, n_distinct(gear))
#返回每个分组第一个和最后一个disp值
summarise(by_cyl, first(disp))
summarise(by_cyl, last(disp))
#返回每个分组中最小的disp值
summarise(by_cyl, min(disp))
summarise(arrange(by_cyl,  disp), min(disp))
#返回每个分组中最大的disp值
summarise(by_cyl, max(disp))
summarise(arrange(by_cyl,  disp), max(disp))
#返回每个分组中disp第二个值
summarise(by_cyl, nth(disp,2))

#使用cyl对数据框分组
grouped <- group_by(mtcars, cyl)
#获取分组数据集所使用的分组变量
groups(grouped)
#ungroup从数据框中移除组合信息,因此返回的分组变量为NULL
groups(ungroup(grouped))

##计数:
group_size用于返回每个分组的记录数,n_groups返回分成的组数。
 对数据集的每个分组计数,类似于base:: table()函数。其中count已经过group_by分组,而tally需要对数据集调用group_by后对分组数据计数。

tally(x, wt, sort = FALSE)
count(x, ..., wt =NULL, sort = FALSE)
#使用count对分组计数,数据已按变量分组
count(mtcars, cyl)
#设置sort=TRUE,对分组计数按降序排序
count(mtcars, cyl, sort = TRUE)
#使用tally对分组计数,需要使用group_by分组
tally(group_by(mtcars, cyl))
#使用summarise对分组计数
summarise(group_by(mtcars, cyl), n())

版权声明:本文为CSDN博主「Kingsley_W」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/wltom1985/article/details/54973811

reference:
R 语言中 dplyr 包 join 函数之目前我看到过的最形象的教程 - 简书 (jianshu.com)

GitHub - gadenbuie/tidyexplain: 🤹♀ Animations of tidyverse verbs using R, the tidyverse, and gganimate

image image

合并的对象为数据框,也可以是能够转换为数据框的列表。

  #按行合并,.id添加新列用于指明合并后每条数据来自的源数据框

  bind_rows(...,.id = NULL)

  #按列合并

  bind_cols(...)

  #合并数据集

   combine(...)

Reference :
https://blog.csdn.net/wltom1985/article/details/54973811
https://zhuanlan.zhihu.com/p/358167377

上一篇下一篇

猜你喜欢

热点阅读