13 数据框

您所在的位置:网站首页 r语言数据分析数据整理格式 13 数据框

13 数据框

2023-07-26 06:59| 来源: 网络整理| 查看: 265

13 数据框 13.1 数据框 13.1.1 数据框定义

统计分析中最常见的原始数据形式是类似于数据库表或Excel数据表的形式。 这样形式的数据在R中叫做数据框(data.frame)。 数据框类似于一个矩阵,有\(n\)个横行、\(p\)个纵列, 但各列允许有不同类型:数值型向量、因子、字符型向量、日期时间向量。 同一列的数据类型相同。 在R中数据框是一个特殊的列表, 其每个列表元素都是一个长度相同的向量。 事实上,数据框还允许一个元素是一个矩阵, 但这样会使得某些读入数据框的函数发生错误。

函数data.frame()可以生成数据框,如

d knitr::kable() ## Rows: 6 Columns: 2 ## ── Column specification ──────────────────────────────────────────────────────── ## Delimiter: "," ## dbl (2): 序号, 收缩压 ## ## ℹ Use `spec()` to retrieve the full column specification for this data. ## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message. 序号 收缩压 1 145 5 110 6 NA 9 150 10 NA 15 115

tibble与数据框的一大区别是在显示时不自动显示所有内容, 这样可以避免显示很大的数据框将命令行的所有显示都充满。 没有显示的列的列名会罗列在显示下方, 显示时每列的类型同时显示,也会显示tibble的行列数。 可以在print()用n=和width=选项指定要显示的行数和列数。 如果指定print(df, n=Inf, width=Inf), 则等同于对数据框的默认显示方式, 能够显示整个tibble, 但列数过多时会分页显示。

也可以用view(df)在一个单独的窗口显示整个tibble。

tibble在生成或输入时不自动将字符型列转换为因子。

13.2.2 列子集问题

另外,用d[,ind]这样的单重的方括号取列子集时, 即使仅取一列, 从tibble取出的一列结果仍是tibble而不是向量, 为了提取一列为向量应使用双方括号格式或$格式。 因为这个原因有些原来的程序输入tibble会出错, 这时可以用as.data.frame()转换成数据框。 如:

d.bp[,"收缩压"] ## # A tibble: 6 × 1 ## 收缩压 ## ## 1 145 ## 2 110 ## 3 未测 ## 4 150 ## 5 拒绝 ## 6 115

如下的语法取出一列向量:

d.bp[["收缩压"]] ## [1] "145" "110" "未测" "150" "拒绝" "115"

tibble在定义时不需要列名为合法变量名, 但是这样的变量名在作为变量名使用时需要用反单撇号包裹。

13.2.3 行名问题

tibble默认不使用行名(rownames)。 有行名的数据框用as_tibble()转换为tibble时, 可以用rownames="变量名"选项将行名转换成tibble的一列, 该列的变量名由选项值确定。

原来用行名完成的功能, 可以改用dplyr包的left_join()等函数, 这些函数进行数据框的横向连接。 详见23。

实际上,旧式数据框支持行名,有如下的缺点:

行名本身往往也是有效的数据,如身份证号, 将有效数据以数据框中的列和行名两种不同形式保存, 增加了复杂度; 为了使用某些变量辨识不同的行(观测), 行名也具有局限性: 行名必须是相互不同的, 必须是字符型, 而用来区分各个观测的变量有可能有多个, 也可能不是字符型。 行名要求互不相同是有局限性的, 如果用来辨识各行的变量有重复值, 就可以构成对各行的一种自然的分组。 13.2.4 bibble和数据框的转换

因为有一些老的R函数仅支持data.frame, 所以有时需要将tibble转换为数据框。 设dt为tibble, 如果不需要添加行名, 则as.data.frame(dt)就可以转换为data.frame。

如果需要添加行名, 设dt中第一列要转换为行名, 转化的模板为

da


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3