• 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 自带例子。      

    另请参阅:

  • 相关阅读:
    2013-2014 NBA 东西部决赛 + 总决赛合集
    小萌库
    小萌库一周电影大合集
    小萌库
    小萌库- 新海诚那些唯美感人的动漫
    小萌库 一周漫画精彩回顾
    小萌库
    Week10-数据库
    Week9-RabbitMQ、Redis、Mysql
    Week8-python(线程、进程、协程)
  • 原文地址:https://www.cnblogs.com/li-20151130/p/9028634.html
Copyright © 2020-2023  润新知