1、根据条件筛选行和列
既筛选行又筛选列
names(df) # 快速查看所有变量名,方便复制
df1 <- subset(df, EXPENOD>0, select<-c("AGE","ANYLIMIT","COLLEGE","HIGHSCH", "GENDER"))
只筛选行
df1 <- subset(df,ANYLIMIT==1)
# 或者
df1 <- df[df$ANYLIMIT==1,]
只筛选列
df1 <- subset(df,select=AGE:COLLEGE)
# 或者
df1 <- df[c("AGE","ANYLIMIT")]
筛选行和列后赋值
df$COLLEGE[df$AGE>20]<-"NO"
2、创建新变量
attach(df)
df$stupid <- AGE+ANYLIMIT
detach(df)
定义stupid时,不可以丢掉df$,那样会单独生成一个value,而非DataFrame中的变量。如果没加attach(df),需要写成
df1$stupid <- df1$AGE + df1$ANYLIMIT
3、排序
df <-df1[order(df1$AGE,-df1$ANYLIMIT),]
df2 <- df2[order(df2$EXPENDOP,na.last=TRUE,decreasing=TRUE),]
注意:1)必须加逗号 。2)排序变量必须加df1$。3)-负号意思是倒序排序。4)na.last=TRUE缺失值放在最后
4、重命名
重命名第2列
colnames(df5)[2] <- 'GENDER'
所有列重命名
names(df5) <- c("AGE","GENDER")
注意:c(“AGE”,“GENDER”)的维数要与df5相同。
5、转换数据类型
df$age <- as.character(df$age) # 变成字符型
df$age <- as.numeric(df$age) # 变成数值型
df$age <- as.logical(df$age) # 变成逻辑型
变成因子型
x <- c("F","M","X","M")
as.factor(x)
y <- c(1,3,2,5)
as.factor(y)
判断数据类型
is.numeric()
is.logical()
is.charactor()
is.factor()
6、缺失值处理
查看缺失值(注意:is.na只能判断数值型缺失,字符型无法判断)
is.na(df[c("age","ANYLIMIT")])
# 或者
is.na(df[,1:2])
删除有缺失值的行(同样只针对数值型缺失)
df2 <- na.omit(df2) # 只要有数值型缺失,就删
# 或者
df2 <- df2[!is.na(df2["EXPENDOP"]),] # 删除EXPENDOP缺失的行
注意:逗号不可省略!表示依然保持原先的列,否则会变成一维数组
缺失值用0填充
df[is.na(df)] <- 0
把某些特殊标记改为缺失值
df$AGE[df$AGE == 9999] <- NA
7、日期
df$DATE <- as.Date(df$DATE, "%Y/%m/%d")
8、计算长度和维度
length(x) # 长度
dim(x) # 长宽维度
注:如果是2 * 2矩阵,length返回4;``返回长宽,2 * 2矩阵,dim返回2 2
9、创建有序型因子
status<-c("Poor","Improved","Excellent","Poor")
df <- data.frame(status,stringsAsFactors=TRUE) # 因子转换为数据框
df$status<-factor(df$status,order=TRUE,levels=c("Poor","Improved","Excellent"))# 有序