加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

LearningR-数据处理赏罚

发布时间:2021-03-14 19:47:13 所属栏目:大数据 来源:网络整理
导读:R自带函数 reshape2 data restructuring dplyr data aggregation tidyr 待清算 字符串处理赏罚 1. R自带函数 1.1 转置 行使函数t()可对一个矩阵或数据框举办转置,对付数据框,行名将酿成变量(列)名。 cars - mtcars(1:5,1:4)carst(cars) 数列array举办维度转

Programming with select 存疑??

select_(iris_df,~Petal.Length)
select_(iris_df,"Petal.Length")
select_(iris_df,lazyeval::interp(~matches(x),x = ".t."))
select_(iris_df,quote(-Petal.Length),quote(-Petal.Width))
select_(iris_df,.dots = list(quote(-Petal.Length),quote(-Petal.Width)))

3.1.5 添加新变量mutate

对已有罗列办数据运算并添加为新列:

mtcars_df <- tbl_df(mtcars)
mutate(mtcars_df,displ_l = disp / 61.0237)
#transmute功效只有计较的字段
transmute(mtcars_df,displ_l = disp / 61.0237)

mutate_each()

对每一列运行窗体函数。

mutate_each(iris,funs(min_rank))

plyr::mutate() 与 base::transform() 相似,上风在于可以在统一语句中对刚增进的罗列办操纵。

mutate(hflights_df,gain = ArrDelay - DepDelay,gain_per_hour = gain / (AirTime / 60)
)
#而同样操纵用R自带函数 transform() 的话就会报错:
transform(hflights,gain_per_hour = gain / (AirTime / 60)
)

通过data.frame有可以实现

mtcars_df <- data.frame(mtcars_df,displ_l = mtcars_df$disp / 61.0237)

3.1.6 汇总summarise

summarise(mtcars_df,mean(disp,na.rm = TRUE),n())
summarise(group_by(mtcars_df,cyl),mean(disp),m = mean(disp),sd = sd(disp))
#对每?一列运?行概述函数。
summarise_each(iris,funs(mean))
by_species <- iris %>% group_by(Species)
by_species %>% summarise_each(funs(length))
by_species %>% summarise_each(funs(mean))
by_species %>% summarise_each(funs(mean),Petal.Width)
by_species %>% summarise_each(funs(mean),matches("Width"))

count()

#计较各变量中每?一个特定值的?行数(带权重或不带权重)。
count(iris,wt = Sepal.Length)
count(iris,mycount = n())

3.1.7 tally

mtcars %>%
    group_by(cyl,vs) %>%
    tally(sort = TRUE)
#与下列方法沟通
mtcars %>%
    group_by(cyl,vs) %>%
    summarise(n = n()) %>%
    arrange(cyl,vs,n)

3.2 分组group_by

当对数据集通过 group_by() 添加了分组信息后,mutate(),arrange() 和 summarise() 函数会自动对这些 tbl 类数据执行分组操纵 (R说话泛型函数的上风).

summarise(mtcars_df,n(),n_distinct(gear))
summarise(group_by(mtcars_df,sd = sd(disp))
#a mutate/rename followed by a simple group_by
group_by(mtcars_df,vsam = vs + am)
group_by(mtcars_df,vs2 = vs)
summarise(group_by(mtcars_df,cyl2=cyl),sd = sd(disp))

另: 一些汇总时的小函数

n(): 计较个数
n_distinct(x): 计较 x 中独一值的个数

3.3 链式操纵(管道) %>% 或 %.%

dplyr包还新引进了一个操纵符,读成then,行使时把数据名作为开头,然后依次对此数据举办多步操纵。好比:

mtcars %>%
    group_by(cyl) %>%
    summarise(total = sum(disp)) %>%
    arrange(desc(total)) %>%
    head(5)
(x1-x2)^2%>%sum()%>%sqrt()

按数据处理赏罚的思绪写代码,一步步深入,既易写又易读,靠近于从左到右的天然说话次序, 比拟一下用R自带函数实现的.

head(arrange(summarise(group_by(mtcars,total = sum(disp)),desc(total)),5)
x1 <- 1:5
x2 <- 2:6
sqrt(sum((x1-x2)^2))

可能像这篇文章所用的要领:

totals <- aggregate(. ~ cyl,data=mtcars[,c("cyl","disp")],sum)
ranks <- sort.list(-totals$disp)
#ranks <- order(-totals$disp)
totals[ranks[1:5],]

文章里还暗示: 通过 %>% 那段代码比跑上面这段代码,运算速率晋升许多倍.

至于这个奇怪的观念会不会和 ggplot2 里的 + 毗连号一样,施展出各种奇奥的成果呢? 照旧在现实行使中多体验感觉吧.

3.5 数据匹共同并join

  • inner_join(x,y) :只包括同时呈此刻x,y表中的行

  • left_join(x,y) :包括全部x中以及y中匹配的行

  • semi_join(x,y) :包括x中,在y中有匹配的行,功效为x的子集

  • anti_join(x,y) :包括x中,不匹配y的行,功效为x的子集,与semi_join相反

  • full_join(x,y) :包括以是x、y中的行

  • right_join(x,y) :包括全部y中以及x中匹配的行

x <- data.frame(name = c("John","Paul","George","Ringo","Stuart","Pete"),instrument = c("guitar","bass","guitar","drums","drums"))
y <- data.frame(name = c("John","Brian"),band = c("TRUE","TRUE","FALSE"))
inner_join(x,y)
left_join(x,y)
semi_join(x,y)
anti_join(x,y)
full_join(x,y)
right_join(x,y)

3.6 毗连数据库

  • dplyr 可以毗连数据库

  • 行使与当地数据框操纵一样的语法

  • 只支持天生SELECT语句

  • 支持SQLite,PostgreSQL/Redshift,MySQL/MariaDB,BigQuery,MonetDB

3.7 操作窗体函数调动数据

4. tidyr

tidyr包的作者也是Hadley Wickham,与dplyr包团结行使,是reshape2包的更换。
(先挖坑...)

5. 字符串处理赏罚

5.1 字符个数 nchar

nchar()可以或许获取字符串的长度,它和length()的功效是有区此外。

nchar(c("abc","abcd"))??? #求字符串中的字符个数,返回向量c(3,4)
length(c("abc","abcd"))? #返回2,向量中元素的个数

5.2 毗连字符 paste

paste()不只可以毗连多个字符串,还可以将工具自动转换为字符串再相连,其它它还能处理赏罚向量,以是成果更强盛。

paste("fitbit",month,".jpg",sep="")
paste("fitbit",1:12,sep = "")

paste默认的脱离符是空格,必需指定sep=""。尚有一个collapse参数,可以把这些字符串拼成一个长字符串,而不是放在一个向量中。

paste("fitbit",1:3,sep = "",collapse = "; ")

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读