数据框 DataFrame

列表可以类比为向量,只不过列表中元素的类型可以是不同的,而向量中的元素类型必须是相同的

数据框可以类比为矩阵,有行和列两个维度,数据框的每一列可以是不同的模式(mode),而矩阵的每一列必须是相同的

数据框是每个组件长度都相等的列表,通常情况下,数据框的每个组件都是向量

创建及操作数据框

创建数据框

  • 直接创建:

    data.frame(...,stringsAsFactors = default.stringsAsFactors())
    

    ...:组成数据框的列,格式为value、tag = value或者已定义的向量名称

  • 将其他类型的对象强制转化为数据框:

    as.data.frame()
    

    访问数据框

  • 类似列表方式:
    • 索引值:df[[1]]
    • 组件名:df$tagNamedf[['tagName']]
    • 双重中括号:返回值类型为向量
    • 单重中括号:返回值类型为数据框
  • 类似矩阵方式:df[, 1]

提取子数据框

数据框可以看作是行和列组成的,因此可以按行或者按列提取子数据框:

df[rowNumber, colNumber, drop = FALSE]

提取子数据框的操作类似于矩阵,使用drop = FASLE可以防止降维,使返回值的类型仍为数据框。

按一定条件筛选数据框

df[ booleanVector, colNumber]

增加新列

df$newCol <- value

可以利用循环补齐,向数据框添加长度不同的列。

删除列

将列值设置为NULL :

df$colName <- NULL

删除行

使用带有负号的行数字索引:

df[-c(1, 2, 3), ]

缺失值处理

  • 录入缺失值:NA
  • 后续统计分析,设置函数的参数na.rm = TRUE或FALSE来决定是否忽略缺失值。

相关函数

subset()函数

无需设置na.rm = TRUE,可以应用在数据框上来选择行,列名称将从给定数据框中获取;

subset(examquiz, Exam.1 >= 3)

无需写为:

subset(examquiz, examquiz$Exam.1 >= 3)

相当于

examquiz[examquiz$Exam.1 >= 3, ]

complete.cases()函数

用于去掉含有一个以上缺失值NA的观测,即去掉不完整的行; Return a logical vector indicating which cases are complete, i.e., have no missing values.

df[complete.cases(df), ]

行或列的增删

  • rbind()

    • 需要列数相同
    • 添加的行通常为向量,数据框或者列表形式、
  • cbind()

    • 需要行数相同

行列名称

  • names()colnames()获取列名称;
  • rownames()获取行名称;
  • names() <- value :修改变量名称

合并数据框

两个数据框根据某个或某些共同变量的值组合到一起

merge()函数

merge(x, y, by = intersect(names(x), names(y)), by.x = by,
by.y = by, all = FALSE, all.x = all, all.y = all)
  • x,y:用于合并的两个数据框;
  • by:指定依据哪些列合并数据,默认为两个数据框中具有相同列名的列;
  • by.x,by.y:用于标示出两个数据框中含有相同信息但名称不相同的两个变量,依据这些变量进行合并;
  • all:logical; all = L is shorthand for all.x = L and all.y = L, where L is either TRUE or FALSE.
  • all.x:
    • logical; if TRUE, then extra rows will be added to the output, one for each row in x that has no matching row in y. These rows will have NAs in those columnsthat are usually filled with values from y. The default is FALSE, so that only rows with data from both x and y are included in the output.
    • 如果参数all.x设置为TRUE,则x中有但y中没有的行会被输出,属于y中列的观察值将会被NA填充;
  • all.y:同all.x;

重复匹配会在结果中全部出现,有时会得出错误的结果,选择匹配变量时必须小心谨慎

在数据框上应用lapply()和sapply()函数

数据框是列表的特例,数据框的列构成了列表的组件;

使用lapply()函数,指定函数为f(),f()会作用于数据框的每一列,然后将返回值置于一个列表中。

results matching ""

    No results matching ""