美文网首页
R中的对象(下)

R中的对象(下)

作者: xiaoxianyu | 来源:发表于2020-01-13 15:53 被阅读0次

9数据集的合并

有时我们会需要把两个或者多个数据集合并为一个。

> dataA<-read.table(header=T,text='

+                   storyid title

+                   1 lions

+                   2 tigers

+                   3 bears')

> dataA

  storyid  title

1       1  lions

2       2 tigers

3       3  bears

> #  创建数据框dataB

> dataB <- read.table( header = T, text = '

+ subject storyid rating

+ 1 1 6.7

+ 1 2 4.5

+ 2 2 3.3

+ 2 1 5.2

+ ')

> dataB

  subject storyid rating

1       1       1    6.7

2       1       2    4.5

3       2       2    3.3

4       2       1    5.2

> merge(dataA, dataB, by="storyid")

  storyid  title subject rating

1       1  lions       1    6.7

2       1  lions       2    5.2

3       2 tigers       1    4.5

4       2 tigers       2    3.3

如果从这个例子中我们可以看到合并依据的是dataA和dataB的共有列向量storyid。

那如果dataA和dataB没有共有列向量呢?

或者说虽然这个向量在两个数据集代表的意义是相同的,但是名字不一样,该怎么办?

>  colnames(dataA)[1]<-c("id")

> dataA

  id  title

1  1  lions

2  2 tigers

3  3  bears

> merge(x=dataA, y=dataB,by.x = "id",by.y="storyid")

  id  title subject rating

1  1  lions       1    6.7

2  1  lions       2    5.2

3  2 tigers       2    4.5

4  2 tigers       2    3.3

列合并是非常有用的,下面来说一个实例:

现有某一地区的植物名录表格gao.csv,表格只有两列,分别为中文名和name。

还有中国IUCN植物红色名录数据表格chinaIUCN.csv,表格内只有两列,分别为濒危等级level和species。

我们要做的是通过匹配2个表格获得该地区植物的IUCN评估等级表。

两个表格都在E盘中的Rdata文件夹下

> a<-read.csv("E:/Rdata/gao.csv")

> b<-read.csv("E:/Rdata/chinaIUCN.csv")

> c<-merge(a,b,by.a="name",by.b="species",all.b=T)

> head(c)

      中文名                                 name level

1   丛生真藓                   Bryum caespiticium    LC

2         蕨Pteridium aquilinum var. latiusculum    LC

3 紫轴凤尾蕨                  Pteris aspericaulis    LC

4 长盖铁线蕨                  Adiantum fimbriatum    LC

5   金毛裸蕨              Paragymnopteris vestita    LC

6 鳞柄短肠蕨                Allantodia squamigera    LC

                                    species

1 Eranthemum austrosinense var. pubipetalum

2 Eranthemum austrosinense var. pubipetalum

3 Eranthemum austrosinense var. pubipetalum

4 Eranthemum austrosinense var. pubipetalum

5 Eranthemum austrosinense var. pubipetalum

6 Eranthemum austrosinense var. pubipetalum

> write.csv(c,"E:/Rdata/gov_IUCN.csv")

除了上面讲到的合并方式,还有行合并和列合并

行合并的时候dataA 和dataB需要具有一样的列向量,命令为:

total<-rbind(dataA,dataB)

列合并的时候要求dataA 和dataB含有一样的行数并且以相同的顺序排序:

total<-cbind(dataA,dataB)

> dfA <- data.frame( Subject = c(1, 1, 2, 2), Response = c("X", "X", "X", "X") )

> dfB <- data.frame( Subject = c(1, 2, 3), Response = c("Z", "Y", "Z") )

> dfA

  Subject Response

1       1        X

2       1        X

3       2        X

4       2        X

> dfB

  Subject Response

1       1        Z

2       2        Y

3       3        Z

> df <- rbind(dfA, dfB)

> df

  Subject Response

1       1        X

2       1        X

3       2        X

4       2        X

5       1        Z

6       2        Y

7       3        Z

10数据子集的提取

有的时候我们可能会提取数据的一部分。下面给出了一个具体实例:

> df <- read.table( header = T, text = '

+ subject sex size

+                   1 M 7

+                   2 F 6

+                   3 F 9

+                   4 M 11

+                   ')

> df

  subject sex size

1       1   M    7

2       2   F    6

3       3   F    9

4       4   M   11

#选取数据框第1行

> df[1, ]

  subject sex size

1       1   M    7

#选取数据框第1、3行

> df[c(1,3), ]

  subject sex size

1       1   M    7

3       3   F    9

#选取数据框第1个列向量的元素

> df[ ,1]

[1] 1 2 3 4

#选取数据框第1、3列向量

> df[ ,c(1,3)]

  subject size

1       1    7

2       2    6

3       3    9

4       4   11

#选取数据框第1、3行的1、3列数据信息,数据框展示

> df[c(1,3), c(1,3)]

  subject size

1       1    7

3       3    9

#我们也可以用列向量的名字选取

> df[ ,"size"]

[1]  7  6  9 11

> df[ "size"]

  size

1    7

2    6

3    9

4   11

> df[ ,c("size","sex")]

  size sex

1    7   M

2    6   F

3    9   F

4   11   M

还有一个好用的函数subset帮助我们选取子集

> subset(df , select = subject)

  subject

1       1

2       2

3       3

4       4

> subset(df , subject < 3)

  subject sex size

1       1   M    7

2       2   F    6

> subset(df , subject < 3, select = -subject)

  sex size

1   M    7

2   F    6

> subset(df , subject < 3 & sex=="M")

  subject sex size

1       1   M    7

11查看呢与删除对象

在R中如果我们想看到对象的信息,简而言之,就是看有哪些对象,就要用到ls()函数

> name<-"Carmen";n<-10;n2<-100;m<-0.5

我们可以看到在R中用;来隔开同一行中的不同命令语句

> ls()

[1] "m"    "n"    "n2"   "name"

如果只显示在名称中带有某个字符的对象,需要用到pattern选项,简写为pat

#显示对象中带有“m”的对象

> ls(pat="m")

#显示对象中以“m”开头的对象

[1] "m"    "name"

> ls(pat="^m")

[1] "m"

用ls.str列出对象及对象的信息,包括具体的数据和数据类型

> ls.str()

m :  num 0.5

n :  num 10

n2 :  num 100

name :  chr "Carmen"

要在内存中删除某个对象,利用rm()

#删除对象m

> rm(m)

> ls()

[1] "n"    "n2"   "name"

#删除所有包含字符m的对象

> rm(list=ls(pat="m"))

> ls()

[1] "n"  "n2"

#删除所有对象

> rm(list=ls())

> ls()

character(0)

参考资料:

R for beginners

ucas相关课程课件

相关文章

  • R中的对象(下)

    9数据集的合并 有时我们会需要把两个或者多个数据集合并为一个。 > dataA<-read.table(heade...

  • R中的对象(中)

    我们对R中的数据类型对象有了一定的了解,接下来就是对数据对象的简单操作。在excel里我们可以通过鼠标来实现,在R...

  • R中的对象(上)

    在R中进行的所有操作都是针对活动内存中的对象的。 此对象非彼对象。个人理解是我们输入R中的一切是对象,得到的结果是...

  • Python 的数据模型

    %r、str.format 中的 !r、v(一个对象)都是调用该对象的 repr 方法print(object) ...

  • R语言与生信应用16-R语法-提取R对象的子集

    提取R对象的子集 R中有很多操作可以提取R对象的子集。 [ 操作返回跟原R对象类相同的对象;可以同时提取多个对象(...

  • 【r<-高级|理论】观察R是如何工作的

    R中的一切皆对象,R表达式也是R对象。这意味着我们可以从语法上解析R表达式,或者部分地执行R表达式,来观察R是如何...

  • 在R语言 中如何把list对象逐行写入csv文件中

    R write list to CSV line by line 在R 中把list对象逐行写入csv文件中,示例如下:

  • 【r<-高级|理论】R的符号和环境

    R中的每一个符号(symbol)都是定义在一个具体的环境中的。环境(environment)就是一个R对象(R中一...

  • 2.3 对象和它的模式与属性(4节)

    2.3 对象和它的模式与属性(4节) R是一个基于对象的语言。 R可以将对象分为单纯(atomic)对象和复合(r...

  • 第三天

    从R对象中提取特定的值 运用[] 提取数据框中特定的值可以通过 对象名[,,,,。。。。。。] 完成,中括号内有...

网友评论

      本文标题:R中的对象(下)

      本文链接:https://www.haomeiwen.com/subject/jxfnactx.html