{"title": "R\u8bed\u8a00data.frame\u5e38\u7528\u64cd\u4f5c", "update_time": "2015-09-23 22:46:55", "tags": "R", "pid": "329", "icon": "default.png"}
## 新建一个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 ``` ### 参考文档 * http://www.ats.ucla.edu/stat/r/faq/subset_R.htm