数据框的增删改
#增加行
a<-data.frame(姓名=c("韩","梦","转"),
成绩=c(66,100,99),
籍贯=c("陕西","山西","四川"),
stringsAsFactors=FALSE #默认是TRUE,意味着字符串创建的数据框,R会将向量处理为因子,而在增加样本数据时,加入一个除因子以外的数据,会报错,所以一般不希望这样处理,将其设置为FALSE
)
a
mylist<-list("小王",100,"辽宁")
a<-rbind(a,mylist)
a #这是用list增加
a
mylist<-c("小王",100,"辽宁")
a<-rbind(a,mylist)
a #这是用向量增加
#增加列
a<-data.frame(姓名=c("韩","梦","转"),
成绩=c(66,100,99),
籍贯=c("陕西","山西","四川")
)
a
mylist<-list(性别=c("男","男","女"))#性别后面必须用等号
a<-cbind(a,mylist)
a#这是用cbind增加列
性别=c("男","男","女")
a<-cbind(a,性别)
a#这是用cbind增加列
a
a<-data.frame(a,性别=c("男","男","女"))
a#这是用dataframe增加列
#修改值
a<-data.frame(姓名=c("韩","梦","转"),
成绩=c(66,100,99),
籍贯=c("陕西","山西","四川")
)
a$成绩[1]=100
a$姓名[1]="韩梦转" #这是错误的,需要加 stringsAsFactors=FALSE
a[[3]][1]="吉林" #stringsAsFactors=FALSE
a[1,2]=100 #第一行,第二列,成绩那栏,可以改
a[1,1]="韩梦转" #需要加stringsAsFactors=FALSE
a[2,]=c("韩梦转",200,"无锡")#需要加stringsAsFactors=FALSE
a[,2]=c(100,200,300)
#删除行或列
a<-data.frame(姓名=c("韩梦转","李晓红","王小刚","李晓娜"),
性别=c("男","女","男","女"),
籍贯=c("山西","陕西","云南","无锡")
stringsAsFactors=FALSE,
)
a<-a[-1,]#删除第一行dataframe
a<-a[,-2]#删除第二列dataframe
a<-a[-3]#删除第三列 dataframe
a<-a[c(-2,-3),]#删除第二行第三行
a<-a[,c(-2,-3,-4)]#删除第2列第3,4列只剩下一列的时候,数据类型会发生改变,character,字符
a<-a[,c(-2,-3,-4),drop=FALSE]#删除第2,3,4列 dataframe 数据框类型
a<-a[c(-2,-3)]#删除第二列第三列 dataframe 数据框
因子
a<-c("韩梦转","王小刚","李小龙","赵晓丽","马小跳","韩梦转","王小刚","李小龙")
aFactor<-factor(a)#将a向量转化为因子,在因子内不同的数值即为水平,因子输出不带引号
aFactor[2]<-"熊大" #不会改成功,因为不是原先就存在的因子
aFactor<-factor(a,levels=c("韩梦转","王小刚","李小龙","赵晓丽","马小跳","熊大"))#如果要改aFactor里面的元素,改的元素要在已有的水平里 ,没有的话就添加
length(aFactor)
tapply(x,f,g)
#x:向量
#f:因子
#g:函数
#将向量按照f的因子进行分组,并针对分组应用g函数
a<-c(2,3,5,7,8,99)
name<-c("韩梦转","王小刚","李小龙","赵晓丽","马小跳","韩梦转")
tapply(a,name,sum/mean/各种函数)
a<-data.frame(姓名=("韩梦转","王小刚","李小龙","赵晓丽","马小跳"),
age=(11,22,12,14,17),
hour=(12,33,24,56,122)
)
a$成年<-ifelse(a$age>18,"成年","未成年")
tapply(a$hour,list(a$姓名,a$成年),mean)#根据姓名和成年的条件计算hour的平均值,设定了两个因子,一个是性别,一个是指示变量(成年or未成年,由于这两个因子每个都有不同的水平,tapply会根据因子匹配组合,然后对魅族应用函数mean)
split(x,f)
#x:向量,数据框
#f:因子,将x按照f分组
a<-data.frame(姓名=("韩梦转","王小刚","李小龙","赵晓丽","马小跳"),
age=(11,22,12,14,17),
hour=(12,33,24,56,122)
gender=("男","女","男","男","女")
)
split(a,list(a$gender,a$age))
选择结构
if语句
if(条件表达式) expression
x<-24
if (x %% 2 ==0) print("偶数")
if (条件表达式) {
expression
}
#if后面如果是一行,则花括号可以省略,否则就必须要将所有的语句都放在花括号中
a<-6
if (a>0) {
print("哈哈")
print("正数")
}
if (a<0) {
print("负数")
print(a)
}
if(条件表达式) expression1 else expression2
x<-6
if (x>0)print("正数") else print("负数")
if (条件表达式){
expression1
...
} else
expression
a<-sample(-10:10,1)
a
if (a>0){
print("a>0")
} else {
print("a<0")
print("重新输出")
}
ifelse(条件表达式,expression1,expression2)#表达式成立,执行1,不成立,执行2
x<-3
ifelse(x>0,x,-x)
ifelse(x>0,">0",ifelse(x<0,"<0","=0"))#ifelse嵌套
if(条件表达式1) {
expression1
} else if (条件表达式2) {
expression2
} else if (条件表达式3) {
expression3
} else {
expression4
}