R语言_第三章

时间:2024-04-12 16:33:20

str函数

str()结构命令:显示数据框中每个变量的属性

int 整数型
num 数值型

载入数据进入R中后,read.table函数和names以及str函数结合使用,str函数可以看载入的数据类型以确保后续不会出现错误信息

提取数据参数

若函数中含data参数
则使用data=,告诉R变量在哪个数据框内。

若函数不含data参数

  1. 使用$ ,输入数据框名, eg. Squid$GSI, 提取Squid数据框中GSI变量值
  2. 选择需访问的行列数,eg.Squid[ ,6],选择第六列

attach函数

attach函数把所需使用到的数据框加到R的搜索路径里,这样就不再需要$符号就可以将变量输入进行计算了

  1. 避免复制变量,不要输入两次attach命令
  2. 使用attach函数要确保使用唯一的变量名称
  3. 若载入多个数据集,并且一次只处理一个数据集,考虑使用detach函数,命令从R的搜索路径里移除一个数据库

unique命令

unique命令可以显示出在这个变量里有多少个唯一值

只用$符号会显示变量Sex的所有值:
R语言_第三章
使用unique函数,则可以显示这个变量有多少个唯一值:
R语言_第三章
1表示雄性,2表示雌性。
访问所有雄性数据:
R语言_第三章

代码解析:

Sel<-Squid$Sex == 1 #生成一个向量Sel与Sex向量具有相同的长度,如果Sex值为1,则该变量的值为T,否则为F,这样的向量称为布尔向量,可以用来选择行

SquidM<-Squid[Sel,] #选择Sel等于TRUE的行,使用方括号[ ],并且,因为想要行,因此要在逗号前面

或者使用 SquidM<-Squid[Squid$Sex==1,] 也可以得到以上结果

雌性数据则可用SquidF<-Squid[Squid$Sex==2,]

布尔运算符号表示
符号|表示或
符号!=表示不等于
符号&表示与

unique(Squid$Location) #得到位置编码为1,2,3,4

#以下均表示提取位置1,2,3位置的数据

Squid123<-Squid[Squid$ Location1|Squid$ Location2|Squid$Location==3,]

Squid123<-Squid[Squid$Location!=4]

Squid123<-Squid[Squid$Location<4]

Squid123<-Squid[Squid$Location<=3]

Squid123<-Squid[Squid$ Location>=1&Squid$ Location<=3]

SquidM.12<-Squid[Squid$ Sex1&(Squid$ Location1|Squid$Location==2),] #提取来自位置1或2的雄性数据

数据排序

order函数

根据变量月份由低到高的值排序GSI数据:
R语言_第三章
按月份只排序一个变量GSI:
R语言_第三章

merge函数

merge使用变量作为相同的标识符合并合并两个数据集。
merge函数的选项all

  1. 在缺省状态下是FALSE,它的含义是Sq1和Sq2的行如果有缺失值将被忽略
  2. 当设置为TRUE时,如果Sq1里没有Sq2里出现的样本数据,将用NAs填充

在缺省状态下合并,all没有指定即设定为FALSE:
R语言_第三章
在设置all选项为TRUE下合并,即缺失值不被忽略:
R语言_第三章

输入输出数据

输入数据:read.table,从文件中读取数据
read.table(file=“文件名”,header=T)
或 scan(file=“文件名”)

输出数据:write.table

write.table(SquidM,file = “MaleSquid_wujiahua.txt”,sep = " ",quote = FALSE,append = FALSE,na = “NA”)

第一个参数是想要输出的变量,第二个是输出的文件名,sep = " " 保证数据用空格隔开,quote = FALSE 消除字符串的引号标志,append = FALSE 打开一个新文件,na = “NA” 允许指定缺失值由什么来代替

x:需要导出的数据
file:导出的文件路径
sep:分隔符,默认为空格(” “),也就是以空格为分割列
row.names:是否导出行序号,默认为TRUE,也就是导出行序号
col.names:是否导出列名,默认为TRUE,也就是导出列名
quote:字符串是否使用引号表示,默认为TRUE,也就是使用引号表示

R语言_第三章

Factor函数

首先str函数给出下列输出,得到变量Location和Sex的编码,这样的变量称为名义变量。
R语言_第三章
接着生成两个新变量fLocation和fSex,变量名前面使用f用于提醒为名义变量:
R语言_第三章
最后一行的Levels告诉我们变量fSex有两个水平,1和2。

也可以重新标记这些水平为M和F:用labels参数打标记
R语言_第三章
Squid$ fSex <- factor(Squid$ Sex,levels = c(1,2),labels = c(“M”,“F”)) #每一个1都转换为M,2则转换为F

boxplot(GSI ~ fSex,data = Squid)
R语言_第三章

使用预先定义的名义变量的优点是在线性回归函数里它使输出变得更短。

使用预先定义的名义变量:
M1 <- lm(GSI ~ fSex+fLocation,data = Squid)
未使用预先定义的名义变量:
M2 <- lm(GSI ~ factor(Sex)+factor(Location),data = Squid)
【在二阶三阶交互作用项中,这种写法将产生一个严重的问题】

as.factor 转换为因子
as.numeric 转换为数值型

作为因子的变量在提取时要加" ",
SquidM<-Squid[Squid$ Sex == 1,] # Sex 变量是数值型
SquidM<-Squid[Squid$ fSex == “1”,] # fSex变量是因子

名义变量有四个水平,水平值按顺序排序:
R语言_第三章

改变排序顺序:

R语言_第三章
定义一个新的名义变量的效果可通过str函数进行查看:
R语言_第三章

总结

write.table 把一个变量写入到ascii文件中 write.table(Squid,file=“test.txt”)

order 确定数据的排序 order(x)

merge 合并两个数据框 merege(a,b,by=“ID”)

str 显示一个对象的内部结构 str(Squid)

factor 定义变量作为因子 factor(x)

factor(数据框$ 变量名,levels=c(按该顺序排序)),labels=c(“定义新的名称”,按levels给定的名义变量顺序转换))

Squid$ fSex <- factor(Squid$ Sex,labels = c(“M”,“F”))
Squid$ fLocation <- factor(Squid$ Location,levels= c(2,3,1,4))