美文网首页
《R语言实战》学习笔记---Chapter4(7) 基础数据管理

《R语言实战》学习笔记---Chapter4(7) 基础数据管理

作者: RSP小白之路 | 来源:发表于2023-08-15 09:08 被阅读0次

    R拥有强大的索引特性, 可以用于访问对象中的元素。 也可利用这些特性对变量或观测进行选入和排除。
    总的来说,R中对象取子集,两种方式,R对象后面跟符号[]并添加条件,或者使用函数
    继续以管理者服从度信息数据为例进行数据子集选取的说明。

    manager <- c(1, 2, 3, 4, 5)
    date <- c("10/24/08", "10/28/08", "10/1/08", "10/12/08", "5/1/09")
    country <- c("US", "US", "UK", "UK", "UK")
    gender <- c("M", "F", "F", "M", "F")
    age <- c(32, 45, 25, 39, 99)
    q1 <- c(5, 3, 3, 3, 2)
    q2 <- c(4, 5, 5, 3, 2)
    q3 <- c(5, 2, 5, 4, 1)
    q4 <- c(5, 5, 5, NA, 2)
    q5 <- c(5, 5, 2, NA, 1)
    leadership <- data.frame(manager, date, country, gender, age,
    q1, q2, q3, q4, q5, stringsAsFactors=FALSE)
    > print(leadership )
      manager     date country gender age q1 q2 q3 q4 q5
    1       1 10/24/08      US      M  32  5  4  5  5  5
    2       2 10/28/08      US      F  45  3  5  2  5  5
    3       3  10/1/08      UK      F  25  3  5  5  5  2
    4       4 10/12/08      UK      M  39  3  3  4 NA NA
    5       5   5/1/09      UK      F  99  2  2  1  2  1
    

    选入(保留) 变量

    • 通过数据框索引进行选择
    newdata <- leadership[,c(6:10)]
    > print(newdata)
      q1 q2 q3 q4 q5
    1  5  4  5  5  5
    2  3  5  2  5  5
    3  3  5  5  5  2
    4  3  3  4 NA NA
    5  2  2  1  2  1
    

    也可以通过变量名实现同样的运行效果,下面会用到一个字符串拼接函数paste

    • 通过变量名进行选择
    varlist <- c("q1", "q2", "q3", "q4", "q5")  # 这两句是等价的
    varlist <- paste("q", 1:5, sep = '')  # 这两句是等价的
    newdata1 <- leadership[varlist]
    > print(newdata1 )
      q1 q2 q3 q4 q5
    1  5  4  5  5  5
    2  3  5  2  5  5
    3  3  5  5  5  2
    4  3  3  4 NA NA
    5  2  2  1  2  1
    

    剔除(丢弃) 变量

    • 通过变量名
      剔除变量的原因有很多。 举例来说, 如果某个变量中有很多缺失值, 你可能就想在进一步分析之前将其丢弃。这里会用到一个判断是否包含其中的语句%in%
    varlist <- names(leadership) %in% c("q3", "q4")
    newdata <- leadership[!varlist]
    >  print(newdata )
      manager     date country gender age q1 q2 q5
    1       1 10/24/08      US      M  32  5  4  5
    2       2 10/28/08      US      F  45  3  5  5
    3       3  10/1/08      UK      F  25  3  5  2
    4       4 10/12/08      UK      M  39  3  3 NA
    5       5   5/1/09      UK      F  99  2  2  1
    

    对上述语句的说明,

    • names(leadership)生成了包含所有变量名的字符型向量;

    • names(leadership) %in% c("q3", "q4")返回一个逻辑型向量,匹配"q3", "q4"TRUE,其它为FALSE

    • !varlist运算符!取非将逻辑反转,即FALSE变为TRUE,其它TRUE变为FALSE

    • leadership[!varlist]选取逻辑值为TRUE的列,"q3", "q4"剔除掉。

    • 通过索引值
      同时,也可以根据索引值前面加-进行剔除;

    newdata <- leadership[c(-8,-9)]
    >  print(newdata)
      manager     date country gender age q1 q2 q5
    1       1 10/24/08      US      M  32  5  4  5
    2       2 10/28/08      US      F  45  3  5  5
    3       3  10/1/08      UK      F  25  3  5  2
    4       4 10/12/08      UK      M  39  3  3 NA
    5       5   5/1/09      UK      F  99  2  2  1
    
    • 通过将若干变量赋值为NULL
    leadership$q3 <- leadership$q4 <- NULL
    > print(leadership)
      manager     date country gender age q1 q2 q5
    1       1 10/24/08      US      M  32  5  4  5
    2       2 10/28/08      US      F  45  3  5  5
    3       3  10/1/08      UK      F  25  3  5  2
    4       4 10/12/08      UK      M  39  3  3 NA
    5       5   5/1/09      UK      F  99  2  2  1
    

    注意, NULLNA (表示缺失) 是不同的。


    选入观测

    选入或剔除观测(行) 通常是成功的数据准备和数据分析的一个关键方面。

    • 通过提供行下标,列下标留空的方式
    >  newdata <- leadership[leadership$gender == "M" , ]
    >  print(newdata )
      manager     date country gender age q1 q2 q3 q4 q5
    1       1 10/24/08      US      M  32  5  4  5  5  5
    4       4 10/12/08      UK      M  39  3  3  4 NA NA
    

    上例中,选择了性别是男性的观测。


    subset()函数

    使用subset() 函数大概是选择变量和观测最简单的方法了。 两个示例
    如下:

    newdata <- subset(leadership, age >= 35 | age < 24, 
     select=c(q1, q2, q3, q4))  #选择所有age值大于等于35或小于24岁的q1至q4的变量
    newdata <- subset(leadership, gender=="M" & age > 25, 
    select=gender:q4)  # 选择所有25岁以上的男性,gender至q4的变量
    

    随机抽样

    sample()函数能够让你从数据集中(有放回或无放回地) 抽取大小为n 的一个随机样本。

    使用以下语句从leadership 数据集中不放回地随机抽取一个大小为3的样本:

    mysample <- leadership[sample(1:nrow(leadership), 3, replace=FALSE),]
    > print(mysample  )
      manager     date country gender age q1 q2 q3 q4 q5
    3       3  10/1/08      UK      F  25  3  5  5  5  2
    1       1 10/24/08      US      M  32  5  4  5  5  5
    4       4 10/12/08      UK      M  39  3  3  4 NA NA
    

    相关文章

      网友评论

          本文标题:《R语言实战》学习笔记---Chapter4(7) 基础数据管理

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