前言
记录一些R语言中简单易忘的语句,矩阵或数据集操作相关(随时更新)
1.创建新数据框
1.创建新数据框:
data = data.frame(ID= character(), age= numeric(), stringsAsFactors=FALSE)
这里会创建一个名为data的数据框,具体长这样:
[1] ID age
<0 行> (或0-长度的row.names)
即有两列名为ID、age的空数据框,经尝试若直接full_join其他新数据框,会出现两列都是NA的名为ID和age的数据
2.创建新矩阵:
https://baijiahao.baidu.com/s?id=1609239397494178918&wfr=spider&for=pc
2.导入数据
amazon_hosts = read.table("amazon_hosts.csv",header = T, sep=",")
class(amazon_hosts)
[1] "data.frame"
注意用read.table导入的数据集格式为data.frame
head(amazon_hosts)
Host Count Proportion
1 Typed amazon.com 89919 0.47577197
2 msn.com 7258 0.03840293
3 yahoo.com 6078 0.03215941
4 google.com 4381 0.02318038
5 recipesource.com 4283 0.02266186
6 aol.com 1639 0.00867214
class(amazon_hosts[,1])
[1] "factor"
class(amazon_hosts[1,1])
[1] "factor"
class(amazon_hosts[,2])
[1] "integer"
class(amazon_hosts[1,2])
[1] "integer"
class(amazon_hosts[,3])
[1] "numeric"
class(amazon_hosts[1,3])
[1] "numeric"
导入的data.frame类型数据集内有三种类型的数据:
1.factor
在R中数据的分类是用因子数据类型(factor)来表示的。因子被用来表示类别数据,因此也被称为“类别变量”。即Categorical Variable
2.integer
3.numeric
改种数据是相对于factor而言的,包括小数的数据类型,即Numerical Variable
2.锁定操作数据集
attach(amazon_hosts)
下面可以直接用数据集中的列名引用,简化数据集名$列名这种方式
3.查看数据集
> summary(amazon_hosts)
Host Count Proportion
24hour-mall.com : 1 Min. : 503.0 Min. :0.002661
aol.com : 1 1st Qu.: 579.2 1st Qu.:0.003065
att.net : 1 Median : 1026.0 Median :0.005429
atwola.com : 1 Mean : 8590.7 Mean :0.045455
bmezine.com : 1 3rd Qu.: 3622.0 3rd Qu.:0.019164
couponmountain.com: 1 Max. :89919.0 Max. :0.475772
(Other) :16
> str(amazon_hosts_rev)
'data.frame': 11 obs. of 3 variables:
$ Host : Factor w/ 23 levels "24hour-mall.com",..: 21 14 22 11 20 2 13 4 5 7 ...
$ Count : int 89919 7258 6078 4381 4283 1639 1573 1289 1285 1166 ...
$ Proportion: num 0.4758 0.0384 0.0322 0.0232 0.0227 ...
summary可以得到一个统计结果,str(structure的缩写)可以得到结构,适用于对象内容过长R不予以展示的内容
> head(amazon_hosts)
> tail(amazon_hosts)
得到数据集前n或者后n行数据
3.重命名行或列
(1)单个行列的重命名
colnames(数据集名)[列数]=‘新列名’
rownames(数据集名)[列数]=‘新列名’
colnames(data)[2] = 'newname'
rownames(data)[2] = 'newname'
(2)将某行列设为行列名
row.names(数据集名)=数据集$列名
row.names(df) = df$gene_id
4.Level函数&Relevel函数
levels(amazon_hosts_rev$Host)
[1] "24hour-mall.com" "aol.com" "att.net"
[4] "atwola.com" "bmezine.com" "couponmountain.com"
[7] "daily-blessings.com" "dealtime.com" "dotcomscoop.com"
[10] "earthlink.net" "google.com" "imdb.com"
[13] "iwon.com" "msn.com" "netscape.com"
[16] "Other" "overture.com" "popupad.net"
[19] "postcards.org" "recipesource.com" "Typed amazon.com"
[22] "yahoo.com"
levels(amazon_hosts_rev$Host)=c(levels(amazon_hosts_rev$Host),'other hosts')
level函数返回因子的不同取值(取决于导入数据框中的取值种类,切割后列名减少但是level不变),可以手动添加
> levels(host_purchase$purchase)
[1] "No" "Yes"
> host_purchase$purchase=relevel(factor(host_purchase$purchase),"Yes")
> levels(host_purchase$purchase)
[1] "Yes" "No"
relevel函数使指定的factor提前到第一个(对factor排序)
4.提取行列长度
提取行或者列再length又麻烦又low
nrow() #()中为数据集或向量名
ncol()
5.矩阵的转置
最常用的t(矩阵名)
注意: 若输入该函数的是数据框,则该数据框会先用as.matrix()转成矩阵格式,然后再引用t(),最终你对一个数据框使用t()函数时,你会得到一个矩阵,而非原先的data.frame.
因为矩阵要求存放的内容是同一种数据类型,对于输入的数据框而言,一般都会有字符串,数值这些,那么最终都会被转成字符串。
因此,如果原先的数据框的第一列是字符串,那么自然而然会把所有的数据都变成字符串,然后把第一列变成第一行。而如果要实现他真正的目的,需要先将第第一行变成行名,然后删掉第一行在转置,也就是
row.names(df) <- df$gene_id
df <- df[,-1]
df <- t(df)
4.数据框切片
用subset函数,第一个参数是要切片的表格,第二个参数是筛选条件,筛选某列的特定值,取出的数据格式仍为数据框。
hosts_msn_recipesource <- subset(host_purchase, host %in% c("msn.com", "recipesource.com"))
也可以直接从数据框中取一列:
a=Nbr.Post_Clicks[Paid == 1]
但是这样得到的就是向量了
6.给数据框添加新行
amazon_hosts_rev[12,]=list('other hosts',sum(tail(Count,11)),0)
注意: 不管是直接添加行还是单个元素,如果是factor类型,添加的内容必须是level中已有的,否则要先添加level
6.数据框计算
数据框类型的数据集可以整行整列计算:
amazon_hosts_rev$Proportion=amazon_hosts_rev$Count/sum(amazon_hosts_rev$Count)
6.数据框排序
sorted=amazon_hosts_rev[order(amazon_hosts_rev$Count),]
其中,order函数返回的是每一行的排名序列