# （数据科学学习手札07）R在数据框操作上方法的总结（初级篇）

1.数据框的生成

...：数据框的构成向量的变量名，顺序即为生成的数据框列的顺序

row.names：对每一行命名的向量

stringAsFactors：是否将数据框中字符型数据类型转换为因子型，默认为FALSE

```> a <- 1:10
> b <- 10:1
> c <- c('a','b','c','d','e','f','g','h','i','j')
> df <- data.frame(a,b,c,row.names = c)
> df
a  b c
a  1 10 a
b  2  9 b
c  3  8 c
d  4  7 d
e  5  6 e
f  6  5 f
g  7  4 g
h  8  3 h
i  9  2 i
j 10  1 j```

```> a <- 1:10
> b <- 10:1
> c <- c('a','b','c','d','e','f','g','h','i','j')
> df <- data.frame(a,b,c,row.names = c, stringsAsFactors = F)
> str(df)
'data.frame':    10 obs. of  3 variables:
\$ a: int  1 2 3 4 5 6 7 8 9 10
\$ b: int  10 9 8 7 6 5 4 3 2 1
\$ c: chr  "a" "b" "c" "d" ...
> df <- data.frame(a,b,c,row.names = c, stringsAsFactors = T)
> str(df)
'data.frame':    10 obs. of  3 variables:
\$ a: int  1 2 3 4 5 6 7 8 9 10
\$ b: int  10 9 8 7 6 5 4 3 2 1
\$ c: Factor w/ 10 levels "a","b","c","d",..: 1 2 3 4 5 6 7 8 9 10```

2.数据框的索引

```> df\$a
[1]  1  2  3  4  5  6  7  8  9 10```

```> df[2]
b
a 10
b  9
c  8
d  7
e  6
f  5
g  4
h  3
i  2
j  1
> df[2:4,]
a b c
b 2 9 b
c 3 8 c
d 4 7 d```

```> df <- data.frame('AA'=a,'B'=b,'C'=c,row.names = c, stringsAsFactors = T)
> attach(df)
>   AA
[1]  1  2  3  4  5  6  7  8  9 10
>   B
[1] 10  9  8  7  6  5  4  3  2  1
> detach(df)```

```> df <- data.frame('AA'=a,'B'=b,'C'=c,row.names = c, stringsAsFactors = F)
> with(df,{
C
})
[1] "a" "b" "c" "d" "e" "f" "g" "h" "i" "j"```

3.数据框的拼接

rbind()与cbind()：

```> df1 <- data.frame(a,b,c,row.names = c, stringsAsFactors = F)
> df2 <- data.frame('AA'=b,'B'=a,'C'=c,row.names = c, stringsAsFactors = F)
> cbind(df1,df2)#cbind()按列横向拼接数据框
a  b c AA  B C
a  1 10 a 10  1 a
b  2  9 b  9  2 b
c  3  8 c  8  3 c
d  4  7 d  7  4 d
e  5  6 e  6  5 e
f  6  5 f  5  6 f
g  7  4 g  4  7 g
h  8  3 h  3  8 h
i  9  2 i  2  9 i
j 10  1 j  1 10 j```
```> rbind(df1,df1)#按列纵向拼接数据框（列名一定要对应）
a  b c
1   1 10 a
2   2  9 b
3   3  8 c
4   4  7 d
5   5  6 e
6   6  5 f
7   7  4 g
8   8  3 h
9   9  2 i
10 10  1 j
11  1 10 a
12  2  9 b
13  3  8 c
14  4  7 d
15  5  6 e
16  6  5 f
17  7  4 g
18  8  3 h
19  9  2 i
20 10  1 j```

4.数据框的合并操作

by：对两个数据框建立内联的共有列（元素交集部分不能为空集），以此列为依据，返回内联列取交集后剩下的样本行

sort：是否对合并后的数据框以内联列为排序依据进行排序，默认为TRUE

suffixes：对合并后数据框同名的列采取的重命名的后缀内容

```> a <- 1:10
> b <- 10:1
> c <- c('b','a','c','d','e','f','g','h','i','j')
> d <- c('b','a','c','d','e','f','g','h','k','j')
> df1 <- data.frame(a,'ID'=c, stringsAsFactors = F)
> df2 <- data.frame(b,'ID'=d,stringsAsFactors = F)
> df1
a ID
1   1  b
2   2  a
3   3  c
4   4  d
5   5  e
6   6  f
7   7  g
8   8  h
9   9  i
10 10  j
> df2
b ID
1  10  b
2   9  a
3   8  c
4   7  d
5   6  e
6   5  f
7   4  g
8   3  h
9   2  k
10  1  j```

```> merge(df1,df2,by='ID')
ID  a  b
1  a  2  9
2  b  1 10
3  c  3  8
4  d  4  7
5  e  5  6
6  f  6  5
7  g  7  4
8  h  8  3
9  j 10  1```

```> merge(df1,df2,by='ID',sort=FALSE)
ID  a  b
1  b  1 10
2  a  2  9
3  c  3  8
4  d  4  7
5  e  5  6
6  f  6  5
7  g  7  4
8  h  8  3
9  j 10  1```

5.数据框的抽样筛选

```> df1[sample(1:nrow(df1),3,replace=FALSE),]
a ID
6   6  f
10 10  j
2   2  a```

6.数据框的条件筛选

```> df1[df1\$a >= 6,]
a ID
6   6  f
7   7  g
8   8  h
9   9  i
10 10  j
> df1[df1\$a >= 6 & df1\$a <= 9,]
a ID
6 6  f
7 7  g
8 8  h
9 9  i```

```> subset(df1, a >= 6& a <=8)
a ID
6 6  f
7 7  g
8 8  h
> subset(df1, a >= 6& a <=8, select='ID')
ID
6  f
7  g
8  h```

7.数据框的去重

duplicated(),用于检测输入的列中有无符合元素重复的行（若输入多列则检测是否存在行的多列组合方式中有无满足重复的行），并返回对应每一列的逻辑型变量。

```> a <- 1:10
> c <- c('b','a','c','d','b','a','d','c','i','j')
> d <- c('b','a','c','d','b','a','g','c','k','j')
> df <- data.frame(c,c,d)
> df
c c.1 d
1  b   b b
2  a   a a
3  c   c c
4  d   d d
5  b   b b
6  a   a a
7  d   d g
8  c   c c
9  i   i k
10 j   j j
> duplicated(df)
[1] FALSE FALSE FALSE FALSE  TRUE  TRUE FALSE  TRUE FALSE FALSE```

```> df[!duplicated(df),]
c c.1 d
1  b   b b
2  a   a a
3  c   c c
4  d   d d
7  d   d g
9  i   i k
10 j   j j```

8.数据框的排序

```> a <- c(2:8,1,10,9)
> c <- c('b','a','c','d','b','a','d','c','i','j')
> d <- c('b','a','c','d','b','a','g','c','k','j')
> df <- data.frame(a,c,d)
> df
a c d
1   2 b b
2   3 a a
3   4 c c
4   5 d d
5   6 b b
6   7 a a
7   8 d g
8   1 c c
9  10 i k
10  9 j j
> newdata <- df[order(a)]
Error in `[.data.frame`(df, order(a)) : undefined columns selected
> newdata
a c d
1   1 b b
2   2 a a
3   3 c c
4   4 d d
5   5 b b
6   6 a a
7   7 d g
8   8 c c
9   9 i k
10 10 j j```

9.缺失值的处理

```> a <- c(1,2,4,3,NA)
> c <- c('b','a','c','d','b')
> d <- c('b','a','c','d','b')
> df <- data.frame(a,c,d)
> df
a c d
1  1 b b
2  2 a a
3  4 c c
4  3 d d
5 NA b b
> mean(df[,1])
[1] NA
> mean(df[,1],na.rm = T)
[1] 2.5```

```> df
a c d
1  1 b b
2  2 a a
3  4 c c
4  3 d d
5 NA b b
> complete.cases(df)#识别数据集中位置有无缺省值
[1]  TRUE  TRUE  TRUE  TRUE FALSE
> which(complete.cases(df)==F)#显示所有含有缺省值的行标号
[1] 5
> sum(complete.cases((df)))#完整观测值的个数
[1] 4
> na.omit(df)#删去含有缺失值的行
a c d
1 1 b b
2 2 a a
3 4 c c
4 3 d d```

0 条评论

## 相关文章

### python 网络编程（udp）

什么是UDP：UDP是一个简单的面向数据报的运输层协议：进程的每个输出操作都正好产生一个UDP数据报，并组装成一份待发送的IP数据报。这与面向流...

39270

43580

507140

37760

### 调用Dlib库进行人脸关键点标记

昨天调试了人脸识别（classifier_webcam）这个程序，效果不错，响应速度也挺快。按照http://blog.csdn.net/u011...

53490

46850

34070

### 【干货】机器学习经典 PRML 最新 Python 代码实现，附最全 PRML 笔记视频学习资料

【导读】最近GitHub上网友ctgk公布了Python实现的经典机器学习图书《Pattern Recognition and Machine Learning...

2.8K70

40470

### MySQL之pymysql模块

PyMySQL介绍 PyMySQL 是在 Python3.x 版本中用于连接 MySQL 服务器的一个库，Python2中则使用mysqldb。 Django中...

43770