R: data.frame 生成、操作數組。重命名、增、刪、改
###################################################
問題:生成、操作數據框 18.4.27
怎麽生成數據框 data.frame、,,及其相關操作 ???
解決方案:
iris[,2,drop = FALSE] #用drop參數,控制截取的子集所生成變量的格式,為單列的"數據框"
dfm1 <- cbind(c1,c2,c3,c4); #cbind 要求向量c1 c2 c3 c4長度必須一樣。
dfm2 <- rbind(c1,c2,c3,c4) #將數據以行進行結合。要求數據列數一樣。
# dfm1 和 dfm2 就互為轉置。
as.data.frame(matrix)
#相關操作:
dfm[1,]; #返回 第一行
dfm[,2]; #返回 第二列
dfm[1:5,2]; #返回 第一到五行,的第二列元素
dfm[1,2:5]; #返回 第一行,的第二到五列元素
dfm[,c(2,4)]; #返回 第二和第四列
dfm[,c(-2,-4)]; #返回 除第二和第四列外的所有其他列,均有效
dfm["name",]; #返回名為 “name” 的行
dfm[["name"]] #返回列名為 “name” 的列,一次只能返回一列
dfm$name #效果同上
討論擴展:
行名重命名:row.names(iris1) <- iris1$ID
列名重命名:names(iris1)[names(iris1) == "temp"] <- "new_name"
aa = c(1,2,2,5,87);
Dfrm = data.frame(col1 = 2*aa,col2=aa+1,col3 = aa,col4=sqrt(aa))
#生成數據框,會按照最長的向量取其長度,短的自動循環補足
#data.frame特點:1、可以不影響原向量基礎上改變數據;2、可以結合不同類型的數據;
另請參閱:
###################################################
問題:數據框 data.frame 重命名、增、刪、改、等, 18.4.27
怎麽對數據框 data.frame實施 增行列、刪行列、改元素與賦值、 ???
解決方案:
#增加列
iris1 <- transform(iris1,log.SL=log(Sepal.Length)) #添加,修改數據。iris.add.col是數據集iris加上一列log.SL得到的。
iris1 <- cbind(iris1[,1:3],iris1$Species,iris1[,4:ncol(iris1)]) #插入到第四列,如果指定插入到某列後面,用行名查看指定的列是第幾列,再執行本句
student$Age <- as.integer(format(Sys.Date(),”%Y”))-as.integer(format(student$Birthdate,”%Y”))
#刪除列
iris.del.col <- transform(iris,Sepal.Length=NULL) #刪除 Sepal.Length 列,新子集賦值給iris.del.col
iris.del.col2 <- subset(iris,select = -Sepal.Width) #刪除 Sepal.Width 列,新子集賦值給iris.del.col2
iris$Sepal.Length = NULL
iris.del.col$Species <- iris.del.col$Petal.Width <- NULL #直接在原data.frame 刪除了兩列。
iris[c(-1,-3)] <- rep("NULL",length(iris)-2) #留下第一第三列,刪除其他列。。。
#增加行 rbind()
v[length(v)+1] <- new_data
total1 <- rbind(dataframeA, dataframeB) #兩個數據框必須有相同的變量,不過它們的順序可以不一樣。
#刪除行 iris.del.row <- iris[-8,]
iris.del.row <- iris[c(-1,-8),]
討論擴展:
#找出最大元素的下標 which.max(x)
#等於6.0的元素的下標 which(x==6.0)
# 大於5的元素的下標 which(x>5)
#append(v,10,after=3)在第三個元素後面加入10,新向量 <- (原向量,新元素) ,添加元素的及合並向量
x=iris[,1]; x[x==5.1]<-25; x #將x中等於5.1的元素變為25
x <- c(1,2,NA,4,5)
x[is.na(x)] <- 0
#合並文件,根據一列共同的標識符(比如唯一的id號)去合並兩個變量。
#添加列:merge
ii = merge(inew,irisnew,by = "num",all = TRUE,sort=FALSE)
# all 為TRUE則取並集,無值補NA,,為FALSE則取交集。。 sort默認為T,即按照“num”排序。
#按共同標識符,即共同列 “num”,合並文件inew和irisnew,,第一個文件在前,後一個在後。
merge(x, y, by = c("k1","k2")) # ?merge 自帶例子。
另請參閱:
R: data.frame 生成、操作數組。重命名、增、刪、改