前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >R语言学习-数据框

R语言学习-数据框

原创
作者头像
靓且有猫
发布2024-07-17 23:36:31
640
发布2024-07-17 23:36:31
举报
文章被收录于专栏:生信学习

数据框

数据框创建

数据框类似矩阵,有行列两个维度。数据框允许不同的列可以包含不同的类型数据。注意数据框可以看成每个组将长度相同的列表。

x <-data.frame(1,2,3,4...),其中的列向量可为任何类型(字符型,数值型或者逻辑型)。

代码语言:r
复制
> mydata1 <- data.frame(name = c("李华","张三","玛丽"),"性别" = c("男","男","女"),age = c(18,19,23))
> #name,性别,age是列名
> mydata1
  name 性别 age
1 李华   男  18
2 张三   男  19
3 玛丽   女  23 #数据框索引,和矩阵索引差不多,使用中括号进行索引
> mydata1[2]
  性别
1   男
2   男
3   女
> class(mydata1[2])
[1] "data.frame"  
> mydata1["name"]  #使用列名索引,与列表,矩阵相同
  name
1 李华
2 张三
3 玛丽
> mydata1[1,3]
[1] 18
> class(mydata1[2])
[1] "data.frame"

数据框的索引

数据框的索引与矩阵的索引差不多

1.索引一整个组件

¥使用一个中括号索引,中括号里写第几列序号

¥使用列名进行索引,与矩阵相同

¥使用$符号索引,与列表相同

代码语言:r
复制
> mydata1 <- data.frame(name = c("李华","张三","玛丽"),"性别" = c("男","男","女"),age = c(18,19,23))
> #name,性别,age是列名
> mydata1$性别
[1] "男" "男" "女"
> class(mydata1$性别)
[1] "character"

数据框有两个维度,可以返回多行多列的结果,具体操作方式与矩阵相同

数据框行列名的获取与更改

数据框行列名的读取与编辑有多种方式,这里介绍两种常用的

数据框列名的读取与更改

1.可以通过colnames(<数据框>)...或者colnames(数据框)

代码语言:r
复制
> mydata1 <- data.frame(name = c("李华","张三","玛丽"),"性别" = c("男","男","女"),age = c(18,19,23))
> #name,性别,age是列名
> colnames(mydata1)[1]
[1] "name"
> colnames(mydata1)[2]
[1] "性别"
> colnames(mydata1)
[1] "name" "性别" "age" 

2.列名更改,colnames(数据框)...或者colnames(数据框) <-c(...)

代码语言:r
复制
> mydata1 <- data.frame(name = c("李华","张三","玛丽"),"性别" = c("男","男","女"),age = c(18,19,23))
> #name,性别,age是列名
> colnames(mydata1)[1] <- "报上名来"
> mydata1
  报上名来 性别 age
1     李华   男  18
2     张三   男  19
3     玛丽   女  23
> colnames(mydata1)<-c("大名","b","cc")
> mydata1
  大名  b cc
1 李华 男 18
2 张三 男 19
3 玛丽 女 23

3.数据框行名的读取与更改

使用row.names()函数进行操作

代码语言:r
复制
> mydata1 <- data.frame(name = c("李华","张三","玛丽"),"性别" = c("男","男","女"),age = c(18,19,23))
> #name,性别,age是列名
> row.names(mydata1)
[1] "1" "2" "3"
> row.names(mydata1)[1]
[1] "1"
> row.names(mydata1)[c(1,3)]
[1] "1" "3"
> row.names(mydata1)[c(1,3)] <- c("aa","cc")
> mydata1
   name 性别 age
aa 李华   男  18
2  张三   男  19
cc 玛丽   女  23

数据框元素的增减

数据框元素的增加

和矩阵一样,也可以使用rbind()和cbind()函数添加行列,但是需要注意数据框使用rbind()时添加的行数据框还是列表

代码语言:r
复制
> mydata2 <- data.frame(name = c("李小华","张蜜桃","刘大灰"),"性别" = c("女","女","男"),age = c(18,19,23))
> #name,性别,age是列名
> mydata2
    name 性别 age
1 李小华   女  18
2 张蜜桃   女  19
3 刘大灰   男  23
> hight <- c(175,176,179) #这里创建了一个身高的向量
> mydata3 <- cbind(mydata2,hight)
> mydata3
    name 性别 age hight
1 李小华   女  18   175
2 张蜜桃   女  19   176
3 刘大灰   男  23   179
> m <- data.frame(name = c("一二"),"性别" = c("女"),age = c(18),hight=c(169))
> m
  name 性别 age hight
1 一二   女  18   169
> n <- rbind(mydata3,m)
> n
    name 性别 age hight
1 李小华   女  18   175
2 张蜜桃   女  19   176
3 刘大灰   男  23   179
4   一二   女  18   169

数据框元素的删除

删除的方式有很多种,但是方法与矩阵差不多

使用负索引

赋值NULL值

代码语言:r
复制
> n
    name 性别 age hight
1 李小华   女  18   175
2 张蜜桃   女  19   176
3 刘大灰   男  23   179
4   一二   女  18   169
> mydata4 <- n[-2,]
> mydata4
    name 性别 age hight
1 李小华   女  18   175
3 刘大灰   男  23   179
4   一二   女  18   169
> mydata4 <- n[-3,-3]
> mydata4
    name 性别 hight
1 李小华   女   175
2 张蜜桃   女   176
4   一二   女   169
> mydata5 <- n
> mydata5[,2] <- NULL
> mydata5
    name age hight
1 李小华  18   175
2 张蜜桃  19   176
3 刘大灰  23   179
4   一二  18   169
> mydata5[,"age"] <- NULL
> mydata5
    name hight
1 李小华   175
2 张蜜桃   176
3 刘大灰   179
4   一二   169

数据框相关函数

基本与矩阵一致,好多函数都可以使用,这里举例apply和lapply函数

代码语言:r
复制
> mydata9 <- data.frame("c1"=c(1,3,5),"c2"= C(6,8,10),"c3"= c(13,15,17),"c4"= C(3,4,5))
Error in `contrasts<-`(`*tmp*`, how.many, value = contr) : 
  对比只适用于有两个或多于两个层次的因子
> mydata9
错误: 找不到对象'mydata9'
> rm(list = ls())
> mydata9 <- data.framedata.frame("n1" = c(1,2,3),"n2" = c(4,5,6),"n3" = c(18,19,23),"n4" = c(5,6,7))
Error in data.framedata.frame(n1 = c(1, 2, 3), n2 = c(4, 5, 6), n3 = c(18,  : 
  没有"data.framedata.frame"这个函数
> rm(list = ls())
> rm(list = ls())
> u <- data.frame("n1" = c(1,2,3),"n2" = c(4,5,6),"n3" = c(18,19,23),"n4" = c(5,6,7))
> u
  n1 n2 n3 n4
1  1  4 18  5
2  2  5 19  6
3  3  6 23  7
> u_mean <- apply(u,1, mean)#求对行均值
> da <- cbind(u,u_mean)
> da
  n1 n2 n3 n4 u_mean
1  1  4 18  5   7.00
2  2  5 19  6   8.00
3  3  6 23  7   9.75
> r<- apply(da,2, mean) #求列均值
> mydata99<-rbind(da,r)
> mydata99
  n1 n2 n3 n4 u_mean
1  1  4 18  5   7.00
2  2  5 19  6   8.00
3  3  6 23  7   9.75
4  2  5 20  6   8.25

#改个行名
> row.names(mydata99)[4] <- c("均值")
> mydata99
     n1 n2 n3 n4 u_mean
1     1  4 18  5   7.00
2     2  5 19  6   8.00
3     3  6 23  7   9.75
均值  2  5 20  6   8.25

有时候数据框会转换为矩阵,可以使用as.matrix()函数操作

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 数据框
    • 数据框创建
    • 数据框的索引
    • 数据框行列名的获取与更改
      • 数据框列名的读取与更改
      • 数据框元素的增减
        • 数据框元素的增加
          • 数据框元素的删除
          • 数据框相关函数
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档