重命名
-
names
R自带
使用后直接修改源数据
语法:names(dataframe)[index]
数据框, 索引号(第几列)
> data
mpg cyl disp hp drat wt qsec vs am gear carb
Mazda RX4 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4
Mazda RX4 Wag 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4
Datsun 710 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1
Hornet 4 Drive 21.4 6 258 110 3.08 3.215 19.44 1 0 3 1
Hornet Sportabout 18.7 8 360 175 3.15 3.440 17.02 0 0 3 2
Valiant 18.1 6 225 105 2.76 3.460 20.22 1 0 3 1
> names(data)[1] <- "test"
> data
test cyl disp hp drat wt qsec vs am gear carb
Mazda RX4 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4
Mazda RX4 Wag 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4
Datsun 710 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1
Hornet 4 Drive 21.4 6 258 110 3.08 3.215 19.44 1 0 3 1
Hornet Sportabout 18.7 8 360 175 3.15 3.440 17.02 0 0 3 2
Valiant 18.1 6 225 105 2.76 3.460 20.22 1 0 3 1
-
rename
reshape包
不修改源数据
##语法: rename(dataframe, c(oldname="newname"))
library(reshape)
rename(data, c(mpg="newmpg")
##原来数据data的列名并没有发生改变,如果想要将修改的列名保存到data,做下列操作:
data <- rename(data, c(mpg="newmpg")
数据组合
1.paste
函数
paste(v1,v2,sep="")
拼接对象是向量
v1 <- c(10,20,30)
v2 <- "g"
v <- paste(v1,v2, sep="")
2.rbind(df1,df2)
行合并
cbind(df1,df2)
列合并
3.merge
按共有变量进行合并(匹配)
merge(x,y,by=intersect(names(x),names(y)),by.x=by, by.y=y, all =FALSE, all.x=FALSE,all.y=FALSE,...)
> df1
ID1 gender
1 101 F
2 102 M
3 109 M
4 100 F
> df2
ID2 math Chinese
1 101 89 56
2 102 56 78
3 106 43 90
> ##公有的变量(组合键)名称不一样的做法
> df <- merge(df1,df2,by.x = "ID1",by.y = "ID2")
> df
ID1 gender math Chinese
1 101 F 89 56
2 102 M 56 78
> ##公有的变量名称一样的做法
> a <- rename(df1,c(ID1="ID")) ##先把df1和df2的第一列名称搞成一样
> a
ID gender
1 101 F
2 102 M
3 109 M
4 100 F
> b <- rename(df2,c(ID2="ID"))##先把df1和df2的第一列名称搞成一样
> b
ID math Chinese
1 101 89 56
2 102 56 78
3 106 43 90
> df <- merge(a,b,by="ID")
> df
ID gender math Chinese
1 101 F 89 56
2 102 M 56 78
##希望呈现的结果
##1、第一个数据a的数据全部保留,第二个数据b只保留与a匹配的数据,其余均排除掉,以NA呈现
> df <- merge(a,b,by="ID",all.x = T)
> df
ID gender math Chinese
1 100 F NA NA
2 101 F 89 56
3 102 M 56 78
4 109 M NA NA
##2、b的数据全部保留,a只保留与b匹配的数据,其余均排除,以NA呈现
> df <- merge(a,b,by="ID",all.y = T)
> df
ID gender math Chinese
1 101 F 89 56
2 102 M 56 78
3 106 <NA> 43 90
##3、a、b的数据全部保留,无法匹配的项以NA呈现
> df <- merge(a,b,by="ID",all = T)
> df
ID gender math Chinese
1 100 F NA NA
2 101 F 89 56
3 102 M 56 78
4 106 <NA> 43 90
5 109 M NA NA
网友评论