《R数据科学实战:工具详解与案例分析 》 —2.2.4 add_row/column—实用小工具

举报
华章计算机 发表于 2019/11/09 18:47:22 2019/11/09
【摘要】 本节书摘来自华章计算机《R数据科学实战:工具详解与案例分析》 一书中第二章,第2.2.4节,作者刘 健 邬书豪 。

2.2.4 add_row/column—实用小工具

在微软的Excel中,用户可以随意插入或者删除一行/列数据,add_row/column函数也为R用户提供了类似的功能。使用baseR来完成新增列的需求相对来说很简单。下面的代码首先创建了一个“tbl”,然后使用“$”来为数据新增一列名为“k”的变量,变量的数值为3、2、1:

    > f <- tibble(i = 1:3,j = c("John","Sam","Joy"))

    > f

    ## # A tibble: 3 x 2

##       i j   

##   <int> <chr>

## 1     1 John

## 2     2 Sam 

## 3     3 Joy

    > f$k <- 3:1

    > f

    ## # A tibble: 3 x 3

##       i j         k

##   <int> <chr> <int>

## 1     1 John      3

## 2     2 Sam       2

## 3     3 Joy       1

在数据框的末尾加入一行新数据也可以实现新增列的功能,不过该功能需要读者对R的基本理论有一定的理解。如下代码所示,延续数据框“f”,配合使用函数“[”和“nrow”可在数据框的末尾新增一行数据。“nrow”的功能是计算对象的行数。

    > f[nrow(f)+1, ] <- c(4,"Jon",0)

    > f

    ## # A tibble: 4 x 3

##   i     j     k   

## * <chr> <chr> <chr>

## 1 1     John  3   

## 2 2     Sam   2   

## 3 3     Joy   1   

## 4 4     Jon   0

小知识

中括号紧跟在数据框后面,可以作为索引来选择数据框中的特定数值。逗号前面为行索引,后面为列索引:[行,列]。读者可以试着配合“ncol”函数,以类似新增行的方式来为“f”新增一列。

tibble包中这两个实用的小函数,可以随时随地任意新增行列数据到指定位置,而不是像baseR中的命令那样只能在数据尾部或已有变量后面新增行或列,在还不是很熟悉R的各种符号代码之前,这两个函数是可以帮助用户快速有效地解决实际问题的。

下面的代码为“f”又新增了一行数据,不过因为这里仅指定了两个变量的值,所以对于未指定的部分,系统将自动填入默认值,具体代码如下:

    > add_row(f,i = 4,j = "Jon")

    ## # A tibble: 5 x 3

##   i     j     k   

##   <chr> <chr> <chr>

## 1 1     John  3   

## 2 2     Sam   2   

## 3 3     Joy   1   

## 4 4     Jon   0   

## 5 4     Jon   <NA>

在第三行之前插入一行新数据,代码如下:

    > add_row(f,i = 4,j = "Jon",.before = 3)

    ## # A tibble: 5 x 3

##   i     j     k   

##   <chr> <chr> <chr>

## 1 1     John  3   

## 2 2     Sam   2   

## 3 4     Jon   <NA>

## 4 3     Joy   1   

## 5 4     Jon   0

第一行之后插入新数据,代码如下:

    > add_row(f,i = 4,j = "Jon",.after = 1)

    ## # A tibble: 5 x 3

##   i     j     k   

##   <chr> <chr> <chr>

## 1 1     John  3   

## 2 4     Jon   <NA>

## 3 2     Sam   2   

## 4 3     Joy   1   

## 5 4     Jon   0

在第一列之后插入新变量,代码如下:

    > add_column(f,l = nrow(f):1,.after = 1)

    ## # A tibble: 4 x 4

##   i         l j     k   

##   <chr> <int> <chr> <chr>

## 1 1         4 John  3   

## 2 2         3 Sam   2   

## 3 3         2 Joy   1   

## 4 4         1 Jon   0


【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。