【R语言数据科学】:(一)R语言基础

1. r语言基础

1.1 数据类型

R语言中有很多不同的类型。例如,我们需要区分数字与字符串,表格与简单的数字列表。functionclass可以帮助我们确定对象的类型:

> a<-2
> class(2)
[1] "numeric"

1.1.1 数据框(Data Frames)

在R中存储数据集最常见的方式是在数据框中。我们可以将数据框视为一个表,其中的行表示样本观测值,列表上不同变量。我们可以将不同数据类型组合成一个数据框。
大部分数据分析都是从存储在数据框中的数据开始的。例如dslabs库中的murders数据集

# 加载数据框
library(dslabs)
data(murders)
class(murders)

‘data.frame’

1.1.2 检查数据对象

使用str函数能返回更多关于数据对象的结构特征

str(murders)
'data.frame':	51 obs. of  5 variables:
 $ state     : chr  "Alabama" "Alaska" "Arizona" "Arkansas" ...
 $ abb       : chr  "AL" "AK" "AZ" "AR" ...
 $ region    : Factor w/ 4 levels "Northeast","South",..: 2 4 4 2 4 4 1 2 2 2 ...
 $ population: num  4779736 710231 6392017 2915918 37253956 ...
 $ total     : num  135 19 232 93 1257 ...

上述告诉了我们这个数据集有五个变量,51个观测数据包含表头。我们可以使用head()显示前六行:

head(murders)
A data.frame: 6 × 5
stateabbregionpopulationtotal
<chr><chr><fct><dbl><dbl>
1Alabama ALSouth 4779736 135
2Alaska AKWest 710231 19
3Arizona AZWest 6392017 232
4Arkansas ARSouth 2915918 93
5CaliforniaCAWest 372539561257
6Colorado COWest 5029196 65

1.1.3 访问器:$

为了访问数据框的某一特定变量,我们可以使用$

murders$population
  1. 4779736
  2. 710231
  3. 6392017
  4. 2915918
  5. 37253956
  6. 5029196
  7. 3574097
  8. 897934
  9. 601723
  10. 19687653
  11. 9920000
  12. 1360301
  13. 1567582
  14. 12830632
  15. 6483802
  16. 3046355
  17. 2853118
  18. 4339367
  19. 4533372
  20. 1328361
  21. 5773552
  22. 6547629
  23. 9883640
  24. 5303925
  25. 2967297
  26. 5988927
  27. 989415
  28. 1826341
  29. 2700551
  30. 1316470
  31. 8791894
  32. 2059179
  33. 19378102
  34. 9535483
  35. 672591
  36. 11536504
  37. 3751351
  38. 3831074
  39. 12702379
  40. 1052567
  41. 4625364
  42. 814180
  43. 6346105
  44. 25145561
  45. 2763885
  46. 625741
  47. 8001024
  48. 6724540
  49. 1852994
  50. 5686986
  51. 563626

得到某一特定变量名字,使用names()

names(murders)
  1. 'state'
  2. 'abb'
  3. 'region'
  4. 'population'
  5. 'total'

1.1.4 向量:数字、字符串和logical

murders$population返回一些列值就是一个向量,使用length可以得到向量长度

pop <- murders$population
length(pop)
class(pop)

51

‘numeric’

上面是一个数值向量,下面我们分别看字符串和logical向量

class(murders$state)

‘character’

class(pop>50)

‘logical’

1.1.5 因子

在R语言中,使用factor存储分类型变量

class(murders$region)

‘factor’

可以看出region是factor变量,我们可以使用levels看它有哪几类

levels(murders$region)
  1. 'Northeast'
  2. 'South'
  3. 'North Central'
  4. 'West'

1.1.6 列表

数据框可以看作是一个特殊的列表,使用list创建列表注意和python的区别

# 方法一
record <- list(name = "John Doe",
             student_id = 1234,
             grades = c(95, 82, 91, 97, 93),
             final_grade = "A")
# 方法2
record2 <- list("John Doe", 1234)
record2
  1. 'John Doe'
  2. 1234

1.1.7 矩阵

矩阵类似数据框,有行有列,但是里面必须是同样的类型,因此数据框更常用

mat <- matrix(1:12, 4,3)
mat
A matrix: 4 × 3 of type int
15 9
2610
3711
4812
# 使用[]索引具体的值
mat[1,2]

5

1.2 向量

在R中,可用于存储数据的最基本对象是向量。正如我们所看到的,复杂的数据集通常可以分解为向量。
例如,在数据框中,每列都是一个向量。

1.2.1 创建向量

我们使用c()来创建一个向量

x <- c(1,2,3)
x
  1. 1
  2. 2
  3. 3

1.2.2 命名

有时命名向量的每一个值很有用。例如在定义国家编码时

codes <- c(italy = 380, canada = 124, egypt = 818)
codes
italy
380
canada
124
egypt
818
class(codes)

‘numeric’

names(codes)
  1. 'italy'
  2. 'canada'
  3. 'egypt'

1.2.3 序列

还可以使用seq()序列函数创建向量

x <- seq(1,10)
x
  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10

seq()函数第一个参数表示开始值,第二个参数表示结束值,最后一个参数表示步长,默认为1。同时包含开始和结束,这一点和python的range函数有一点区别,python不包含结束值。

1.2.4 索引

我们可以通过索引访问向量中某一特定元素

x <-  codes[1]
x

italy: 380

codes[1:2]
italy
380
canada
124

1.3 排序

例如,以murders数据集为例,我们想要以枪杀案升序排序

sort(murders$total)
  1. 2
  2. 4
  3. 5
  4. 5
  5. 7
  6. 8
  7. 11
  8. 12
  9. 12
  10. 16
  11. 19
  12. 21
  13. 22
  14. 27
  15. 32
  16. 36
  17. 38
  18. 53
  19. 63
  20. 65
  21. 67
  22. 84
  23. 93
  24. 93
  25. 97
  26. 97
  27. 99
  28. 111
  29. 116
  30. 118
  31. 120
  32. 135
  33. 142
  34. 207
  35. 219
  36. 232
  37. 246
  38. 250
  39. 286
  40. 293
  41. 310
  42. 321
  43. 351
  44. 364
  45. 376
  46. 413
  47. 457
  48. 517
  49. 669
  50. 805
  51. 1257

但是这样我们并不能得到是哪些州枪击案最多

1.3.1 order

使用order函数可以得到变量排序的索引,例如

x <- c(31,4,15,92,65)
sort(x)
  1. 4
  2. 15
  3. 31
  4. 65
  5. 92
# 使用order
idx <- order(x)
idx
  1. 2
  2. 3
  3. 1
  4. 5
  5. 4
x[idx]
  1. 4
  2. 15
  3. 31
  4. 65
  5. 92

可以看到结果和sort函数一样,下面我们对murders数据集使用order


ind <- order(murders$total)
murders$abb[ind]
  1. 'VT'
  2. 'ND'
  3. 'NH'
  4. 'WY'
  5. 'HI'
  6. 'SD'
  7. 'ME'
  8. 'ID'
  9. 'MT'
  10. 'RI'
  11. 'AK'
  12. 'IA'
  13. 'UT'
  14. 'WV'
  15. 'NE'
  16. 'OR'
  17. 'DE'
  18. 'MN'
  19. 'KS'
  20. 'CO'
  21. 'NM'
  22. 'NV'
  23. 'AR'
  24. 'WA'
  25. 'CT'
  26. 'WI'
  27. 'DC'
  28. 'OK'
  29. 'KY'
  30. 'MA'
  31. 'MS'
  32. 'AL'
  33. 'IN'
  34. 'SC'
  35. 'TN'
  36. 'AZ'
  37. 'NJ'
  38. 'VA'
  39. 'NC'
  40. 'MD'
  41. 'OH'
  42. 'MO'
  43. 'LA'
  44. 'IL'
  45. 'GA'
  46. 'MI'
  47. 'PA'
  48. 'NY'
  49. 'FL'
  50. 'TX'
  51. 'CA'

这样可以得到哪些州的枪杀较多

1.3.2 max和which.max

如果我们只对最大值感兴趣,那么可以使用max

max(murders$total)

1257

和order类似,which.max()返回最大值的索引

i_max <- which.max(murders$total)
murders[i_max, ]
A data.frame: 1 × 5
stateabbregionpopulationtotal
<chr><chr><fct><dbl><dbl>
5CaliforniaCAWest372539561257

min和which.min是同样的结果

1.3.3 rank

和order、sort,rank不是针对数据排序的,而是返回每个值的秩

x <- c(31,4,15,92,64)
rank(x)
  1. 3
  2. 1
  3. 2
  4. 5
  5. 4

1.3.4 小心recycling

有点时候数据长度不匹配,可能导致在向量计算的时候自动循环使用而出现问题

x <- c(1,2,3)
y <- c(10,20,30,40,50,60)
x+y
  1. 11
  2. 22
  3. 33
  4. 41
  5. 52
  6. 63

上述两个向量长度不相等,但是发现x循环使用了两次,这有点类似python中的广播机制

posted @   JOJO数据科学  阅读(288)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
点击右上角即可分享
微信分享提示