R语言data.frame常用操作

     2015年09月23日       江南兔子哥       非专业笔记->R语言       

新建一个data.frame 作为以下 测试验证的基础

name <- c('A','B','C','D','E','F')
age  <- c(28,30,29,32,25,27)
sex  <- c('F','M','M','F','F','M')
weight <- c(100,100,120,110,130,100)
people <- data.frame(name, age, sex,weight)

name <- c('A','C')
like <- c('travel','read book')
interest <- data.frame(name,like)

data.frame基础操作

查看data.frame有多少列

> nrow(people)
[1] 6

查看data.frame的前几列

> head(people,n=3)
  name age sex weight
1    A  28   F    100
2    B  30   M    100
3    C  29   M    120

data.frame csv相关操作

读入csv文件

#Shell
#cat /tmp/test.csv
A,1
B,4
C,3
D,5


#R
> read.table(file='/tmp/test.csv',sep=',',col.names=c('name','xuehao'))
  name xuehao
1    A      1
2    B      4
3    C      3
4    D      5

写入csv文件

#R
> write.table(xueshen,file='/tmp/xueshen.csv',sep=',',row.names=FALSE,quote=FALSE)

#Shell
#cat /tmp/xueshen.csv
name,xuehao
A,1
B,4
C,3
D,5

data.frame筛选操作

使用subset 筛选data.frame的数据

筛选出age>30的数据

> subset(people,age>=30)
  name age sex weight
2    B  30   M    100
4    D  32   F    110

筛选出age>30且sex为'F'的数据

> subset(people,age>30&sex=='F')
  name age sex weight
4    D  32   F    110

筛选出age>30的name列

> subset(people,age>30,select=name)
  name
4    D

使用坐标进行筛选

  • 个人理解,data.frame是二维的,按坐标筛选的时候[行,列],
  • 使用坐标还是subset 进行行列筛选,两者能达到的效果是一样的

看 name和sex列

> people[,c('name','sex')]
  name sex
1    A   F
2    B   M
3    C   M
4    D   F
5    E   F
6    F   M

看sex>30的name和sex

> people[people$age>30,c('name','sex')]
  name sex
4    D   F

data.frame 之vlookup 实现

使用merge函数使用vlookup;找出people、interest中name一样的行,合并

> merge(people,interest,by='name')
  name age sex weight      like
1    A  28   F    100    travel
2    C  29   M    120 read book

参考文档