明天的笔记内容是R语言中因子数据框的根底介绍和应用办法。更多笔记关注公众号:生信剖析笔记

R语言 因子

因子能够用来存储不同类别的数据类型,R 语言创立因子应用 factor() 函数,向量作为输出参数。

factor() 函数语法格局:

factor(x = character(), #向量levels,  #指定各程度值labels = levels, #程度标签exclude = NA,  #剔除的字符ordered = is.ordered(x), #逻辑值,指定是否排序 nmax = NA) #程度的下限

创立因子

依照如下形式可能创立一个简略的因子,含有大和小两个程度。

> x <- c("大", "小", "大")> yinzi <- factor(x)> print(yinzi)[1] 大 小 大Levels: 大 小> print(is.factor(yinzi))  # 判断是不是因子[1] TRUE

增加程度标签

首先,设置因子程度(共两个程度“大”、“小”),具体形式如下:

> # 因子程度标签> x <- c("大", "小", "大",levels=c("大","小"))> yinzi <- factor(x)> print(yinzi)                        levels1 levels2      大      小      大      大      小 Levels: 大 小

应用 labels 参数为每个因子程度增加标签,labels 参数的字符程序,要和 levels 参数的字符程序保持一致。

> x <- factor(c("大", "小", "大","小","小"),levels=c("大","小"),labels=c("big","small"),ordered=TRUE)> print(x)[1] big   small big   small smallLevels: big < small
  • 生成因子程度

应用 gl() 函数来生成因子程度,语法格局如下:

gl( n,  #level的个数    k,  #每个level的反复次数    length = n*k,  #总长度    labels = seq_len(n),  #level的值    ordered = FALSE) #是否排好程序

设置3个level,每个level反复4次的因子程度,并输入它,示例:

> v <- gl(3,4,labels = c("sheng","xin","biji"))> print(v) [1] sheng sheng sheng sheng xin   xin   xin   xin   [9] biji  biji  biji  biji Levels: sheng xin biji

R语言数据框

数据框(Data frame)也就是常说的"表格"。数据框是 R 语言的数据结构,是非凡的二维列表。

  • 数据框每一列都有一个惟一的列名,长度都是相等的,同一列的数据类型须要统一,不同列的数据类型能够不一样。
  • 作为数据框变量的向量、因子或矩阵必须具备雷同的长度(行数)。
  • 数据框每列是一个变量,每行是一个观测。
  • 向量、因子为数据框提供一个变量,如果向量非数值型则会被强制转换为因子。

R语言中用date.frame()函数来创立,如下:

data.frame(…,  #列向量,能够是字符、数值、逻辑值row.names = NULL,  #行名,默认为NULLcheck.rows = FALSE, #查看行名和长度是否统一check.names = TRUE,  #检查数据框的变量名是否非法fix.empty.names = TRUE,  #设置是否主动命名stringsAsFactors = TRUE) #字符是否转化为因子

接下来,通过实例来演示应用办法,创立数据框和获取数据框信息操作如下:

> table <- data.frame(  #创立一个数据框+   name1 <- c("boy","girl","dog"),+   year1 <- c("12","16","7"),+   add1 <- c("school","home","wc")+ )> str(table)   #获取数据结构'data.frame':    3 obs. of  3 variables: $ name1....c..boy....girl....dog.. : chr  "boy" "girl" "dog" $ year1....c..12....16....7..      : chr  "12" "16" "7" $ add1....c..school....home....wc..: chr  "school" "home" "wc"> print(summary(table))  #summary显示概要信息 name1....c..boy....girl....dog.. year1....c..12....16....7.. Length:3                         Length:3                    Class :character                 Class :character            Mode  :character                 Mode  :character            add1....c..school....home....wc.. Length:3                          Class :character                  Mode  :character 
  • 提取与显示特定项

    > print(data.frame(table$name....c..boy....girl....dog..,table$add....c..school....home....wc..))data frame with 0 columns and 0 rows> print(2)#提取第二列> print(table[1:2,]) #提取后果前两行 name1....c..boy....girl....dog.. year1....c..12....16....7..1                              boy                          122                             girl                          16 add1....c..school....home....wc..1                            school2                              home
  • 增加新的项
> table$work <- c("ren","ren","animal") #增加新列> table[4,] <- c("5","6","7","8") #增加新行(第4行)> print(table)  name1....c..boy....girl....dog.. year1....c..12....16....7..1                              boy                          122                             girl                          163                                5                           6  add1....c..school....home....wc.. work1                            school  ren2                              home  ren3                                 7    8
  • 复制某些项(反复行号法)
print(table[c(1,1:3),]) #把第一行复制一次,采纳反复行号的方法。    name1....c..boy....girl....dog.. year1....c..12....16....7..1                                boy                          121.1                              boy                          122                               girl                          163                                  5                           6    add1....c..school....home....wc.. work1                              school  ren1.1                            school  ren2                                home  ren3                                   7    8
  • 批量复制多行(rep函数)
> print(table[rep(1:3,each <- 2),]) #rep函数得出从1到3数列,反复2次。    name1....c..boy....girl....dog.. year1....c..12....16....7..1                                boy                          122                               girl                          163                                  5                           61.1                              boy                          122.1                             girl                          163.1                                5                           6    add1....c..school....home....wc.. work1                              school  ren2                                home  ren3                                   7    81.1                            school  ren2.1                              home  ren3.1                                 7    8
  • 数据合并操作

    > v1 <- c("a","b")> v2 <- c("1","2")> v3 <- c("ok","no")> > out1 <- cbind(v1,v2,v3)  #将多个向量合成数据框,默认竖向填充> print(out1)   v1  v2  v3  [1,] "a" "1" "ok"[2,] "b" "2" "no"> > hebing <- rbind(out1,out1)  #合并数据框> print(hebing)   v1  v2  v3  [1,] "a" "1" "ok"[2,] "b" "2" "no"[3,] "a" "1" "ok"[4,] "b" "2" "no"

参考资料:
https://www.runoob.com/r