标签:
目录:
创建新变量
> mydata <- transform(mydata,avg = (age + weight)/2 , total = age + weight) > mydata name age weight avg total 1 张三 32 42 37.0 74 2 李四 45 56 50.5 101 3 王五 25 120 72.5 145 4 赵六 39 120 79.5 159 5 老二 199 180 189.5 379
变量重编码
> mydata$age[mydata$age == 199] <- NA
> mydata
name age weight
1 张三 32 42
2 李四 45 56
3 王五 25 120
4 赵六 39 120
5 老二 NA 180
> mydata <- within(mydata,{
+ agecat <- NA
+ agecat[age >= 45] <- "Elder"
+ agecat[age > 25 & age < 45] <- "Middle Aged"
+ agecat[age <= 25] <- "Young"})
> mydata
name age weight agecat
1 张三 32 42 Middle Aged
2 李四 45 56 Elder
3 王五 25 120 Young
4 赵六 39 120 Middle Aged
5 老二 NA 180 <NA>
注意:
with() 与 within() 函数功能类似,不同点在于它允许你修改数据框
> sum(mydata$age) [1] NA > sum(mydata$age,na.rm = TRUE) [1] 141
日期值
> t <- Sys.time();t #获取当前时间 [1] "2016-10-11 17:43:27 CST" > as.POSIXlt(t-24*60*60) #获取一天前的日期 [1] "2016-10-10 17:43:27 CST" > l <- unclass(t);l #长整形的数据自1970-01-01年开始 [1] 1476179008 > as.POSIXct(l,origin = "1970-01-01") #将长整形的数据转换为日期型数据 [1] "2016-10-11 17:43:27 CST" > format(t,format="%Y-%m-%d %H:%M:%S") #自定义时间格式 [1] "2016-10-11 17:43:27" > dob<-as.Date("2016-10-01") > difftime(t,dob,units = "days") #计算时间差 Time difference of 10.40518 days
数据排序
> with(mydata,{ + orderData <<- mydata[order(age,-weight),] + }) > orderData name age weight avg total 3 王五 25 120 72.5 145 1 张三 32 42 37.0 74 4 赵六 39 120 79.5 159 2 李四 45 56 50.5 101 5 老二 199 180 189.5 379
数据集合并
> merge(m1,score,by=c("name")) name age weight yw sx yy 1 老二 199 180 100 100 100 2 李四 45 56 80 87 76 3 王五 25 120 100 98 87 4 张三 32 42 90 80 100 5 赵六 39 120 94 92 90
> cbind(m1,score)
name age weight name yw sx yy
1 张三 32 42 张三 90 80 100
2 李四 45 56 李四 80 87 76
3 王五 25 120 王五 100 98 87
4 赵六 39 120 赵六 94 92 90
5 老二 199 180 老二 100 100 100
> m2 <- data.frame(name=m1$name,yw=m1$age,sx=m1$weight,yy=m1$weight%%m1$age) > rbind(m2,score) name yw sx yy 1 张三 32 42 10 2 李四 45 56 11 3 王五 25 120 20 4 赵六 39 120 3 5 老二 199 180 180 6 张三 90 80 100 7 李四 80 87 76 8 王五 100 98 87 9 赵六 94 92 90 10 老二 100 100 100
数据集取子集
> x <- cbind(m1,score);x
name age weight test name yw sx yy
1 张三 32 42 10 张三 90 80 100
2 李四 45 56 11 李四 80 87 76
3 王五 25 120 20 王五 100 98 87
4 赵六 39 120 3 赵六 94 92 90
5 老二 199 180 180 老二 100 100 100
> y <- x[,c(1,2,5,6)];y
name age name.1 yw
1 张三 32 张三 90
2 李四 45 李四 80
3 王五 25 王五 100
4 赵六 39 赵六 94
5 老二 199 老二 100
> z <- x[,c(-3,-4,-5,-8)];z
name age yw sx
1 张三 32 90 80
2 李四 45 80 87
3 王五 25 100 98
4 赵六 39 94 92
5 老二 199 100 100
> x$weight <- x$test <- x[,5] <- x$yy <- NULL
> x
name age yw sx
1 张三 32 90 80
2 李四 45 80 87
3 王五 25 100 98
4 赵六 39 94 92
5 老二 199 100 100
> x1 <- cbind(m1,score);x1 name age weight name yw sx yy 1 张三 32 42 张三 90 80 100 2 李四 45 56 李四 80 87 76 3 王五 25 120 王五 100 98 87 4 赵六 39 120 赵六 94 92 90 5 老二 199 180 老二 100 100 100 > subset(x1,age>=25 & age < 50,select = c("name","age","yw","sx")) name age yw sx 1 张三 32 90 80 2 李四 45 80 87 3 王五 25 100 98 4 赵六 39 94 92
> x1 <- merge(m1,score,by=c("name"));x1 name age weight yw sx yy 1 老二 199 180 100 100 100 2 李四 45 56 80 87 76 3 王五 25 120 100 98 87 4 张三 32 42 90 80 100 5 赵六 39 120 94 92 90 > library(sqldf) > sqldf("select name,age,yw,sx,yy from x1 where age >=25 and age < 35 order by age") name age yw sx yy 1 王五 25 100 98 87 2 张三 32 90 80 100
随机取样
> y1 <- x1[sample(1:nrow(x1),size = 2,replace = FALSE),] > y1 name age weight yw sx yy 2 李四 45 56 80 87 76 5 赵六 39 120 94 92 90 > y1 <- x1[sample(1:nrow(x1),size = 2,replace = FALSE),] > y1 name age weight yw sx yy 1 老二 199 180 100 100 100 3 王五 25 120 100 98 87
标签:
原文地址:http://www.cnblogs.com/tgzhu/p/5946950.html