精华内容
下载资源
问答
  • 2017-05-11 17:00:03

    今天要带本科的一门课,惭愧,现在从头开始学,新的东西,开


    这个系列的博客只是为了记录自己在摸索中的一些随笔,大神勿


    喷!!


    本来按照课本上应该学到了表的查阅和关系这个点的,也就


    是查阅向导问题,结果不知道我的Access版本问题,还是怎么


    的,反正就是出不来,我就想实现一个性别的,男女性别问题


    的。结果百度了以后,觉得组合框值列表也可以实现这个功能,


    就记录下了这个点的过程。


    方法:


    1、新建一个表→字段名"性别"→文本型


    2、在下面的"常规"与"查询"属性中选择"查询"


    3、显示控件设为"组合框"


    4、行来源类型选择"值列表"→行来源输入:男;女  (注:是英文状态下的标点;)

    5、保存表→运行表试试效果吧

    更多相关内容
  • 数据类型简介 数值型numeric 例:1.4 2 3 字符型character 例:"a" 'n' '1' 'TRUE' 'FALSE' 只要带有引号(单双均可) 逻辑型logical(必须大写) TRUE T FALSE F NA #比较运算的结果是逻辑值 >,<,...

    数据类型简介

    数值型numeric

    例:1.4 2 3

    字符型character

    例:"a" 'n' '1' 'TRUE' 'FALSE'

    只要带有引号(单双均可)

    逻辑型logical(必须大写)

    TRUE T

    FALSE F

    NA

    #比较运算的结果是逻辑值
        >,<,<=,>=,==(相等?),!=(不相等)
            3==5     FALSE
            3!=4    TRUE
    
    #逻辑运算 多个逻辑条件的连接 
        #与&
            3<5&4>5    #FALSE
        #或|
            3<5|4>5  #TRUE
        #非!
            !(4>5) #TRUE变FALSE, FALSE变TRUE
    

    数据类型的判断和转换

    #练习2-1:分别判断"a",TRUE,3是什么数据类型
    > class("a") 
    [1] "character" 
    > class(TRUE) 
    [1] "logical" 
    > class(3) 
    [1] "numeric"

    判断--is族函数

    #is族函数,返回值为TRUE,FALSE
    is.numeric() #是否数值型数据
    is.logical() #是否逻辑型数据
    is.character() #是否字符型数据
    
    > is.numeric("4") 
    [1] FALSE

    转换--as族函数

    #as族函数实现数据类型之间的转换
    as.numeric() #将其他数据类型转换为数值型
    as.logical() #将其他数据类型转换为逻辑型
    as.character() #将其他数据类型转换为字符型
    
    > as.numeric("4") 
    [1] 4

    常见报错:引号、拼写错误、大小写、中文符号

    其他

    paste中collaspse参数将组合变成一个字符

    赋值和输出的两种方法:

    (x=c(1,2))

    x=c(1,2);x

    =和==的区别

    =是赋值号,==是判断是否相等,返回逻辑值

    数据结构分类

    向量(vector)--一维

    • 数据框单独拿出的一列,视为一个整体(可以一起+1,一起赋值……)。
    • 一个向量只能有一种数据类型,可以有重复值。

    矩阵(matrix)

    • 有两个维度
    • 不同列数据类型必须相同,长度也要相同
    • matrix()

    数据框(dataframe)

    • 重点围绕数据框🌟作图要处理的数据绝大多数在数据框🌟
    • 意义
      • 数据框约等于“表格”,没有真实存在
      • 是R语言内部存在数据
      • 但可以导出为表格,但导出来的文件已经不是数据框了
      • 有两个维度
      • 不同列的数据类型可不同,长度需相同
      • data.frame()
      • 行名列名严格区分,数据框的第一行不是列名!!!

    列表(list)

    • 长度可以不同、数据类型也可以不同
    • 没有行和列的概念,可以有多级元素

    向量

    向量的生成

    #(1)用 c()逐一放到一起
     c(2,5,6,2,9)     #[1] 2 5 6 2 9 
     c("a","f","md","b") #[1] "a" "f" "md" "b" 
    
    #(2)连续的数字用冒号”:” 
     1:5 #[1] 1 2 3 4 5 
    
    #(3)有重复的用rep(),
    #     有规律的序列用seq(),
    #     随机数用rnorm
     rep("gene",times=3) #[1] "gene" "gene" "gene" 
     seq(from=3,to=21,by=3) #[1] 3 6 9 12 15 18 21 
     rnorm(n=3) #[1] -1.2882504 -0.8186668 -0.1031025 
    
    #(4)通过组合,产生更为复杂的向量。
     paste0(rep("gene",times=3),1:3) #[1] "gene1" "gene2" "gene3"

    ##练习2-2:向量的生成
    #1.将两种不同类型的数据用c()组合在一起,看输出结果
    > c(1,"a")#数据类型会转换
    [1] "1" "a"
    
    #2.生成1到30之间所有4的倍数,答案是 :4,8,12,16,20,24,28
    > seq(from=4,to=30,by=4)
    [1]  4  8 12 16 20 24 28
    
    #3.生成sample4,sample8,sample12…sample28   提示:paste0
    > paste0(rep("sample",times=7),seq(from=4,to=30,by=4))
    [1] "sample4"  "sample8"  "sample12"
    [4] "sample16" "sample20" "sample24"
    [7] "sample28"

    数据类型转换的优先顺序

    对单个向量进行的操作

    (1)赋值给一个变量名

     x = c(1,3,5,1) #随意的写法
     x
    
     x <- c(1,3,5,1) #规范的赋值符号Alt+减号
     x  #[1] 1 3 5 1
    
    #赋值+输出一起实现
    x <- c(1,3,5,1);x
    (x <- c(1,3,5,1)) 

    (2)简单数学计算

    x <- c(1,3,5,1) 
    
    x+1 #[1] 2 4 6 2
    
    log(x) #[1] 0.000000 1.098612 1.609438 0.000000
    
    sqrt(x) #[1] 1.000000 1.732051 2.236068 1.000000

    (3)根据某条件进行判断,生成逻辑型向量

    x <- c(1,3,5,1)
    x>3 #[1] FALSE FALSE  TRUE FALSE
    x==3 #[1] FALSE  TRUE FALSE FALSE

    (4)初级统计

    max(x) #最大值
    min(x) #最小值
    mean(x) #均值
    median(x) #中位数
    var(x) #方差
    sd(x) #标准差
    sum(x) #总和

    (5)重点(长度、去重复、重复值统计)

    x <- c(1,3,5,1)
    
    length(x)  #长度,即向量中元素的个数
      #[1] 4
    
    unique(x)  #去重复,一个元素但凡出现了,不论出现多少次,只保留首次
      #[1] 1 3 5
    
    duplicated(x) #对应元素是否重复,运行结果为FALSE-首次出现,TRUE-非首次出现
      #[1] FALSE FALSE FALSE  TRUE
    !duplicated(x) #即能够首次-TRUE,非首次-FALSE
      #[1]  TRUE  TRUE  TRUE FALSE
    
    table(x) #重复值统计
      #x
      #1 3 5 
      #2 1 1
    sort(x) #排序,默认是从小到大排序
      #[1] 1 1 3 5
    sort(x,decreasing=T) #从大到小排队
      #[1] 5 3 1 1
      

    对两个向量进行操作

    (1)逻辑比较

    x = c(1,3,5,1,6)
    y = c(3,2,5,6)
    
    x == y #对应位置的对比;生成等长的逻辑向量,不论哪个在前面,都会循环补齐(短的补齐长的)
      #[1] FALSE FALSE TRUE FALSE FALSE
    
    x %in% y #对x中的每个元素进行判断,x中的元素在y中吗,只要存在即可,位置不需要对应
             #若x,y元素不等,谁在前面就返回那个向量的元素个数的逻辑值
      #[1] FALSE  TRUE  TRUE FALSE  TRUE
    y %in% x
      #[1]  TRUE FALSE  TRUE  TRUE

    %in%的应用:

    (2)数学计算

    x = c(1,3,5,1,6)
    y = c(3,2,5,6)
    x + y #也会循环补齐进行计算
      #[1]  4  5 10  7  9
    y + x
      #[1]  4  5 10  7  9

    (3)“连接”

    x = c(1,3,5,1,6)
    y = c(3,2,5,6)
    paste(x,y,sep=":") #sep=':'--添加分隔符''内的分隔符可随意设置,默认为一个空格
      #[1] "1:3" "3:2" "5:5" "1:6" "6:3",也循环补齐了
    
    #paste0()与paste()的区别/联系?
     paste(x,y)
       #[1] "1 3" "3 2" "5 5" "1 6" "6 3"
     paste0(x,y)
       #[1] "13" "32" "55" "16" "63"
     #paste0()是无缝连接,paste()默认为空格分隔连接
     #paste(x,y,sep='')即等于paste0()

    (4)交集、并集、差集

    intersect(x,y) #交集
      #[1] 3 5 6
    union(x,y) #并集
      #[1] 1 3 5 6 2
    setdiff(x,y) #x-y差集
      #[1] 1
    setdiff(y,x) #y-x差集
      #[1] 2

    利用循环补齐简化代码

    paste0(rep("gene",3),1:3)
    paste0("gene",1:3)
      #[1] "gene1" "gene2" "gene3"

    向量筛选(取子集)

    []:将TRUE对应的值挑出来,FALSE丢弃

     x <- 8:12;x  #[1]  8  9 10 11 12
    #根据逻辑值取子集
     x[x==10] #[1] 10
     x[x<12] #[1]  8  9 10 11
     x[x %in% c(9,13)] #[1] 9
    
    #根据位置取子集
     x[4] #[1] 11
     x[2:4]#取第2位到第4位的数字
       #[1]  9 10 11
     x[c(1,5)]#取第一位和第五位的数字,x[1,5]不行因为1,5不是个向量
       #[1]  8 12
    
     x[-4]#去掉第4个
       #[1]  8  9 10 12
     x[-(2:4)]#去掉第2-4个
       #[1]  8 12

    修改向量中的某个/些元素:取子集+赋值

    R语言里的修改,都要赋值,没有赋值就没有发生过!!!

    x #[1]  8  9 10 11 12
    
    #改一个元素
     x[4] <- 40 #x向量中的第4个数字取出,赋值40,改为40
     x #[1]  8  9 10 40 12
    
    #改多个元素
     x[c(1,5)] <- c(80,20)#x向量中的第1和第5修改为80,20
     x #[1] 80  9 10 40 20

    简单向量作图

    k1 = rnorm(12);k1 #K1为有12个随机数的向量
    1:length(k1)
    k2 = rep(c("a","b","c","d"),each = 3);k2 #each生成出来的是aaabbbcccddd,times=3生成abcdabcdabcd
    plot(k1) #以K1值为Y,默认x轴
    boxplot(k1~k2) #boxplot,以k1为y,K2为x画箱式图

    练习2-4

    # 1.将基因名"ACTR3B","ANLN","BAG1","BCL2","BIRC5","RAB","ABCT","ANLN","BAD","BCF","BARC7","BALV"组成一个向量,赋值给x
    x=c("ACTR3B","ANLN","BAG1","BCL2","BIRC5","RAB","ABCT","ANLN","BAD","BCF","BARC7","BALV")
    
    # 2.用函数计算向量长度
    length(x)
    
    # 3.用向量取子集的方法,选出第1,3,5,7,9,11个基因名。
    seq(1,11,2)
    x[c(seq(1,11,2))]
    
    # 4.用向量取子集的方法,选出出在c("ANLN", "BCL2","TP53")中有的基因名。
    # 提示:%in%
    x%in%c("ANLN", "BCL2","TP53")
    x[x%in%c("ANLN", "BCL2","TP53")]#取子集
       # "ANLN" "BCL2" "ANLN"
    #这个方法太复杂
    unique(x[x%in%c("ANLN", "BCL2","TP53")])#unique去重复
    
    #intersect()取交集就可以去重复
    intersect(x,c("ANLN", "BCL2","TP53"))
    
    # 5.修改第6个基因名为"a"并查看是否成功
    x[6] <- "a";x[6]
    #x[6]= -a无效,a需要用引号(字符型)
    
    # 6.生成10个随机数: rnorm(n=10,mean=0,sd=18),用向量取子集的方法,筛出其中小于-2的值
    rnorm(n=10,mean=0,sd=18)
    y1=rnorm(n=10,mean=0,sd=18);y1
    y1[y1<-2]#-和前面的<号合成赋值号了,加个空格解决问题
    y1[y1< -2]#加空格和加括号都能解决问题
    y1[y1<(-2)]

    向量进阶

    (1)不同类型的向量合并会发生什么?

    会发生数据类型的转换

    (2)两个向量组合为一个长向量

    x=c(1,3,5)
    y=c(2,3,4)
    test=c(x,y) ##c(x,y) 谁写在前面就在前面
    test #[1] 1 3 5 2 3 4

    (3)如何在向量首/尾/中间某位置增加一个元素?

    x=c(1,3,5)
    x=c(3,x) #在首位加3
    x=c(x,4) #在末尾加4
    
    #在中间某位置增加一个元素
    n=3
    x=c(1,3,5,8,6)
    x ## [1] 1 3 5 8 6
    y=c(x[1:n-1],7,x[n:length(x)])
    y ## [1] 1 3 7 5 8 6
    
     ##写成函数
    join <- function(x,n,y){
      c(x[1:n-1],y,x[n:length(x)])
    }
    x=c(1,3,5,8,6)
    join(x,3,7)
    ## [1] 1 3 7 5 8 6

    (4)向量匹配排序-match()

    ##如果向量x和y内容一致但顺序不一致,如何按照x的顺序排列y?
    x <- c('A','B','C','D','E')
    Y <- c('B','D','E','A','C')
    match(x,y)#赋值Y的是大写字母,match y小写字母
    x <- c('A','B','C','D','E')
    y <- c('B','D','E','A','C')
    match(x,y)#x里的第1,2,4...个元素在y中的位置,以x为模板,输出y中元素的相对位置
    y[match(x,y)]#以x作为模板,给y调顺序=用x里的顺序取出y的子集

    数据框基础

    循环补齐简化代码实例

    #第1种
    paste0(rep("sample",7),seq(4,28,4))
    #第2种
    y=seq(4,28,4)
    paste0(req("sample",length(y)),y)
    #第3种
    paste0("sample",y)

    1.数据框来源

    1. 在R中新建
    2. 由已知数据转换或处理得到
    3. 从文件中读取
    4. 内置数据集

    #在数据框中,行、列区分非常严格,行名和列名都不能算作标准的行、列(只允许一种数据类型)

    2.数据框新建和读取: data.frame

    数据框本质上是向量的排列组合

    #新建
    df <- data.frame(gene = c("gene1","gene2","gene3"), #逗号分隔
                     sam  = c("sample1","sample2","sample3"),#每一列的内容
                     exp  = c(32,34,45))
    df
    df <- data.frame(gene  = paste0("gene",1:3),
                     sam   = paste0("sample",1:3),
                     exp   = c(32,34,45))
    df
    
    #读取
    df2 <- read.csv("gene.csv")  #读取gene.csv这个文件,记得""
    df2
    #df,df2只是变量名,并不是df,df2决定了是数据框!!!

    3.数据框属性描述

    #维度(有几行几列)     dim(df)
    #单独返回行数、列数     nrow(df)/ncol(df)
    #行名/列名             rownames(df)/colnames(df)

    4.数据框取子集:[ , ],$

    中括号里的逗号,表示维度的分隔 [行,列]

    #报错提示维度不够
    x=1:5 #x是一个向量,
    x[1,5]   #该代码的意义是取x的第一个维度的第1个数和第2个维度的第5个数
    x[c(1,5)]     #该逗号不属于中括号,向量只有一个维度,应该写x[c(1,5)]--提取x的第一和第五的元素

    4.1按照位置

    #取某一个框             df[2,2]
    #取一行                 df[2,]
    #取一列                 df[,2]
    #行列双选               df[c(1,3),1:2] #取1和3行的第1到2列

    4.2按照行名/列名

    #按照行名/列名取子集,当行数、列数都很多的时候,该操作有效(向量也可以按照名字取子集)
    df[,"gene"]  #取出df中列名为gene的列
    df$exp   #取出df中列名为exp的列,$只能取列
             #删掉exp,在$后按tab键试试(可直接选择数据框中的其他列)
    
    df[,c('gene','exp')] #取出df中的gene和exp列
    
    ncol(df) #输出df有多少列
    #取最后一列             df[,ncol(df)]
    #去掉最后一列           df[,-ncol(df)]
    
    #筛选exp<35的行        
    df$exp
    df$exp[df$exp < 35]#筛选出exp列小于35的数据
    df[df$exp<35,]#取出满足exp列数据小于35的行
    
    mean(df$exp) #计算df中exp列的平均值

    提取列的符号(Tab)

    5.数据框编辑

    ##取子集$/[]+赋值操作
    #改一个格                df[3,3]<- 5
    #改一整列                df$exp<-c(12,23,50) #exp列在df中存在
    #新增一列                df$abc <-c(23,15,37) #abc列在df中不存在
    
    #输出列名                colnames(df) 
    #输出行名                rownames(df)
    #改行名和列名            rownames(df) <- c("r1","r2","r3") #列名colnames()
    #只修改某一行/列的名     rownames(df)[2]="x"

    代码运行后无法撤销,但可以修改后重新运行;

    已赋值或修改的变量可以再次赋值,即覆盖;多次赋值,以最后一次为准。

    练习3-1

    # 1.读取excise.csv这个文件,赋值给test。
    test <- read.csv('excise.csv') #记得加引号
    test
    
    # 2.描述test的属性(行名列名,行数列数)。
    dim(test);nrow(test);ncol(test)
    rownames(test);colnames(test)
    
    # 3.求第一列数值的中位数
    median(test[,1])
    
    # 4.修改test前两列的列名为Length和Width
    colnames(test)[c(1,2)]='Length','Width'#错在后面,应该是c('Length','Width');向量=向量
    colnames(test)[c(1,2)]=c('Length','Width')
    
    # 5.提取test中,最后一列值为a或b的行,组成一个新的数据框,赋值给test2。
    test2 <- test[test$Species %in% c("a","b")] #数据框取子集必有两个维度[,]
    test2 <- test[test$Species %in% c("a","b"),]
    #test2 <- 赋值
    #test[test$Species %in% c("a","b"),]--取出符合要求的行(数据框内取子集有维度,要加,!!)
    
    #计算abcd个数
    table(test$species) #a b c d 
                        #5 4 4 2 

    数据框进阶(常用函数)

    1.行数较多的数据框可截取前/后几行查看

    #行数较多的数据框可截取前/后几行查看
    iris #内置数据
    head(iris) #默认截取前6行
    head(iris,3) #指定截取前3行
    tail(iris) #默认截取最后6行

    2.行列数都多的数据框可取前几行前几列查看

    iris[1:3,1:3] #查看前3行,前3列

    3.查看每一列的数据类型和具体内容 str()

    str(df)
    str(iris)

    chr:字符型 int:整数型(numeric中的一种)factor:因子

    4.去除含有缺失值的行: na.omit(),tidyr包

    #生成一个有NA的数据框
    df<-data.frame(X1 = LETTERS[1:5],X2 = 1:5)
    df[2,2] <- NA
    df[4,1] <- NA
    df
    
    na.omit(df)      #但凡有NA出现的行都去除

    #仅按照某一列来去除缺失值、缺失值替换:tidyr包

    5.两个表格的连接: cbind(),rbind(),merge()

    cbind 按列连接,行数必须相同

    rbind 按行连接,列数必须相同

    merge(a,b, by="")

    test1 <- data.frame(name = c('jimmy','nicker','doodle'), 
                        blood_type = c("A","B","O"))
    test1
    test2 <- data.frame(name = c('doodle','jimmy','nicker','tony'),
                        group = c("group1","group1","group2","group2"),
                        vision = c(4.2,4.3,4.9,4.5))
    test2 
    
    test3 <- data.frame(NAME = c('doodle','jimmy','lucy','nicker'),
                        weight = c(140,145,110,138))
    tmp  =merge(test1,test2,by="name")  #以相同列名连起来
    merge(test1,test3,by.x = "name",by.y = "NAME") #test1和3的名字列名不同(严格区分大小写)
    
    

    #merge()若两个数据框的表格有些对应不上,生成的新变量会自动去掉那些没对应上的数据

    #若不希望被删掉,需要其他包,之后课会学到

    矩阵

    新建: matrix()

    m <- matrix(1:9, nrow = 3);m # 生成1~9,3列的矩阵;123在第一列
    n <- matrix(1:9, nrow = 3,byrow=T);n#123在第一行
    
    colnames(m) <- c("a","b","c") #给矩阵加上列名
    m

    加上列名

    取子集:[,] (不支持$)

    ##不支持$
    #整行    m[2,]
    #整列    m[,1]
    #单个格  m[2,3]
    #多个格  m[2:3,1:2]#取第2和3行,第1到2列的4个数据

    转置和转换

    m
    #转置
    t(m)#行变列,列变行,行名列名跟着动
    
    #转换
    as.data.frame(m)#将矩阵转换为数据框,无条件
    as.matrix()#将数据框转为矩阵,必须数据类型只有一种

    转置

    转换

    矩阵画热图

    pheatmap::pheatmap(m)#默认会聚类
    pheatmap::pheatmap(m,cluster_cols = F,cluster_rows = F)#不聚类,按照原本矩阵的行和列

    默认的设置不符合心意,那就自定义

    列表

    生成:list()

    #列表新建
    l <- list(m=matrix(1:9, nrow = 3),
              df=data.frame(gene  = paste0("gene",1:3),
                            sam   = paste0("sample",1:3),
                            exp   = c(32,34,45)),
              x=c(1,3,5))
    l #列表l有三个元素:m是矩阵,df是数据框,x是向量

    取子集:[[]],$

    ##取子集,两个中括号(因为单个取出来的还是列表性质,但两个括号取出的就是那个部分本身的性质)
    l[[2]]#元素没有名字只能这样取;取第2个元素
    l$df #元素有名字可以用$

    补充

    1.元素的名字:names()

    元素可命名,用函数names(),

    可根据名字提取子集,

    向量、数据框、列表通用。

    #(1)向量
    x=1:10 #x是一个1-10的数值型向量
    names(x)=letters[1:10] #给x里的10个元素分别取个名字(letters是R里的内置函数)
    x #命名不会改变x的性质,x仍是数值型向量
    x["a"] #可使得向量能够通过名字取子集
    
    #(2)数据框
    df <- data.frame(gene  = paste0("gene",1:3),
                     sam   = paste0("sample",1:3),
                     exp   = c(32,34,45))
    df
    names(df) #输出df中的名字
    df[,"X1"]#df里没有叫x1的列
    #(3)列表
    names(l)#l里的元素名字
    l[["df"]]#取出l里叫df的元素

    2.删除

    #删除一个变量,变量!变量!变量!没法删除变量的一部分

    #删除一个变量
    rm(l)#括号内写变量;删除变量l
    l #> l  Error: object 'l' not found
    
    #删除多个变量 rm(df,m)
    
    #删除全部变量 rm(list = ls()) 
    
    #清空控制台 ctrl+l,视觉选项,但其实运行过的都在的

    练习3-2

    #1.统计iris最后一列有哪几个取值,每个取值重复了多少次
    iris
    tail(iris,1)#最后一行
    table(tail(iris,1))#错
    table(iris$Species)#iris tab键选最后一列
    table(iris[,length(iris)])
    table(iris[,ncol(iris)])
    
    #2.提取iris的前10行,前4列,并转换为矩阵,赋值给a。
    a <- as.matrix(iris[1:10,1:4])
    a
    
    #3.将a的行名改为flower1,flower2...flower10。
    rownames(a)=rep("flower",10)##不对
    rownames(a)=paste0("flower",10)##不对
    b=1:10
    rownames(a)=paste0("flower",b)
    
    #4.将a的第4到7行删除(提示:删除也是一种修改)
    a=a[-(4:7),];a
    #5.b = rnorm(3),将a和b组成一个列表,赋值给x
    x <- list(a,b=rnorm(3))
    x
    
    b=rnorm(3)
    x <- list(a,b)#更简洁
    x
    #6.探索x[2]和x[[2]]的区别(提示:数据结构)
    x[2]#list, 取出列表的第2个元素作为子集,仍是列表
    x[[2]]#numeric,取出列表里的叫[2]的元素,这个元素的性质
    class(x[2])
    class(x[[2]])
    #8.探索:列表x的元素有名字(names)吗?
    names(x)
      #如果有,它的名字是什么?
      #如果没有,试着给它加上名字,随便取名即可。
    name(x)=c("jimmy",'jones')#错,names()函数写错
    names(x)=c("jimmy",'jones')
    

    3.代码注意

    b=1:10;rownames(a)=paste0("flower",b)

    rownames(a)=rep("flower",10) 错错错!!!

    数据结构练习和函数介绍

    批量加#:全部选中后code-comment

    作业

    load("matchtest.Rdata")
    b <- x[match(colnames(y),x$file_name),]
    colnames(y) <- b$ID
    
    ##
    load("matchtest.Rdata")
    match(x$file_name,colnames(y))#以x的file_name为模板,得到y列名的排序
    y[match(x$file_name,colnames(y))]#以x的file_name为模板,将y的列名对应上      
    y2 <- y[match(x$file_name,colnames(y))]#将对应上的数据框赋值y2
    y2
    #更改y2的列名为x里的ID列
    colnames(y2) <- x$ID
    y2
    
    #identical(x,y)--判断x和y变量是否相同
    colnames(y)=x$ID[match(colnames(y),x$file_name)]
    #把y的列名改为x里的ID,[将$ID的顺序与y的列名对应上]

     

    展开全文
  • 作者:圈圈来源公众号:宏基因组学习R语言,需要先安装R语言,只需要从 https://www.r-project.org/ 下载适合你系统的最新版本软件安装即可。R语言有...

    640?wxfrom=5&wx_lazy=1

    作者:圈圈

    来源公众号:宏基因组

    640?wx_fmt=gif&wxfrom=5&wx_lazy=1

    学习R语言,需要先安装R语言,只需要从 https://www.r-project.org/ 下载适合你系统的最新版本软件安装即可。R语言有个优秀的环境叫Rstudio,具体安装可参考  《R语言学习 - 入门环境Rstudio》一文。


    R语言中的数据类型(Data Types)

    R语言的对象(Objects)主要包括向量、矩阵、数组、数据框和列表。

    640?wx_fmt=png&wxfrom=5&wx_lazy=1

    R语言的对象有五种最基本的类型,即,字符型(character)、数值型(numeric,包括小数)、整型(integer)、复数型(complex)以及逻辑型(logical,TRUE/FALSE)

    属性是R语言对象的一部分。主要包括以下几种:名字(names,dimnames),维度(dimensions,包括矩阵等),类别(class,包括数字、整数等),长度(length),以及其他。可通过 attributes()函数查看对象的属性,不是所有对象都有属性,如果没有则返回NULL。


    1. 向量

    向量(vector)是R语言中最基本的数据类型,执行组合功能的函数 c()可用来创建向量。

    各类向量如下例所示:

    
     
    1. a <- c (1, 2, 7, -4, 5)            ## numeric

    2. b <- c ("Rice", "Wheat")           ## character

    3. c <- c (TRUE, TRUE, FALSE, TRUE)   ## logical

    4. d <- c (1+0i, 2+4i)                ## complex

    5. e <- c (9:17)                      ## integer

    注意:单个向量中的数据必须拥有相同的类型(数值型、字符型或逻辑型)。

    创建空向量可以使用 vector()函数。例如创建一个指定长度为10、类型为数值型的空向量:

    
     
    1. > x <- vector("numeric", length = 10)

    2. > x

    3. [1] 0 0 0 0 0 0 0 0 0 0

    另外,标量是只含一个元素的向量,它们用于保存常量。例如

    
     
    1. f <- 3

    2. g <- "US"

    3. h <- TRUE

    2. 矩阵

    矩阵(matrice)是具有维度属性的向量,矩阵都是二维的,和向量类似,矩阵中也仅能包含一种数据类型。

    主要有三种创建矩阵的方法:

    (1)直接创建

    例:数字1-20自动创建为一个5行4列的矩阵,自动填充第一列之后开始填充第二列

    
     
    1. y <- matrix(1:20, nrow = 5, ncol = 4)

    2. > y

    3.     [,1] [,2] [,3] [,4]

    4. [1,]    1    6   11   16

    5. [2,]    2    7   12   17

    6. [3,]    3    8   13   18

    7. [4,]    4    9   14   19

    8. [5,]    5   10   15   20

    9. > dim(y)                          

    10. [1] 5 4                            ##dim()看维度,5行4列

    (2)矢量+维度向量

    添加维度向量 dim()是将矢量转变为矩阵的方法

    
     
    1. > m <- c(1:10)

    2. > m

    3. [1]  1  2  3  4  5  6  7  8  9 10

    4. > dim(m) <- c(2,5)                   ##2行5列          

    5. > m

    6.     [,1] [,2] [,3] [,4] [,5]

    7. [1,]    1    3    5    7    9

    8. [2,]    2    4    6    8   10

    (3)绑定行或列来创建矩阵

    绑定行或绑定列可以通过 cbind()rbind()来实现

    
     
    1. > x <- 1:3

    2. > y <- 10:12

    3. > cbind (x, y)

    4.     x  y

    5. [1,] 1 10

    6. [2,] 2 11

    7. [3,] 3 12

    8. > rbind (x, y)

    9.  [,1] [,2] [,3]

    10. x    1    2    3

    11. y   10   11   12

    3. 数组

    数组(array)与矩阵类似,但是维度可以大于2。数组可通过array函数创建。

    4. 列表

    列表(list)是一种可包含多种不同类型对象的向量,是一些对象(或成分,component)的有序集合。

    
     
    1. > x <- list(1, "a", TRUE, 1 + 4i)

    2. > x

    3. [[1]]

    4. [1] 1

    5. [[2]]

    6. [1] "a"

    7. [[3]]

    8. [1] TRUE

    9. [[4]]

    10. [1] 1+4i

    5.数据框

    数据框(Data Frames)是一种特殊的列表,其中所用元素长度都相等,列表中的每个元素都可以看作一列,每个元素的长度可以看作行数。

    创建显式数据框的方法是 data.frame()

    
     
    1. > ID <- c(1,2,3,4)

    2. > age <- c(25,26,55,43)

    3. > diabetes <- c("Type1","Type2","Type3","Type1")

    4. > status <- c("Poor", "Improved", "Excellent","Poor")

    5. > data <- data.frame(ID, age, diabetes, status)

    6. > data

    7.  ID age diabetes    status

    8. 1  1  25    Type1      Poor

    9. 2  2  26    Type2  Improved

    10. 3  3  55    Type3 Excellent

    11. 4  4  43    Type1      Poor

    参考资料:

    1. https://bookdown.org/rdpeng/rprogdatascience/R Programming for Data Science

    2. 《R语言实战》 Robert I. Kabacoff




    一套SVIP课程,15选8,每套课程均价112! 知识付费的时代, 一次旅游的钱便能收获8大全方位、多体系的课程
    更有全场六折优惠课程,为你加油助力!

    640?wx_fmt=png


    天善学院SVIP,只为让你更优秀!

    这里“阅读原文”,查看更多

    展开全文
  • 列表框和组合框的使用

    万次阅读 2010-06-24 15:21:00
    列表框是显示一系列项供用户选择的控件,对选中的项可以进行后续的处理。用户选择可以是多项的,但本章的例程设计为单选的。组合框是一个编辑框带一个可以下拉的列表框,用户在下拉框中选择的项会进入编辑框中...

    列表框是显示一系列项供用户选择的控件,对选中的项可以进行后续的处理。用户选择可以是多项的,但本章的例程设计为单选的。组合框是一个编辑框带一个可以下拉的列表框,用户在下拉框中选择的项会进入编辑框中,再进行后续处理,选择也可以用键盘的光标键。在编辑框中也可以直接输入。

     

    本章要点

    1 列表框的设计、项的添加和删除
    2 组合框的设计和使用

     

    12.1 ListCombo程序运行时的界面和功能

     

     VC++60 <wbr>第十二章 <wbr>列表框和组合框
    chap12-01

    List1在初始化时加入了六项。点击[<]按钮就把选中的项移动到List2中去。点击[>]按钮则相反。点击[<<]和[>>]按钮则移动全部项。用[清除列表]按钮可删除List1的全部项。[加入到]按钮把你选中的在编辑框中项添加到List1中,[加入全部]按钮则把组合框设置的所有项添加到List1中。组合框预置了“中国”这一项,但没有设计删除功能。列表框和组合框都有一个从0开始的整数索引和一个用于显示的文本。

     

    12.2 对话框界面设计

     

    按控件属性表设计界面。

    控件类型标题ID and GenaralStylesExtended Styles
    listBox IDC_LIST1
    显示checked
    选择Simple,Border
    Virteber scroll
    listBox IDC_LIST2
    显示checked
    选择Simple,Border
    Virteber scroll
    ComboBox IDC_CONTRIES_COMBO
    显示checked
    类型:Drop list
    Virteber scroll
    Static edge
    Button<IDC_MOVE_BUTTON
    Button>IDC_BACK_BUTTON
    Button<<IDC_MOVEALL_BUTTON
    Button>>IDC_BACKALL_BUTTON
    Button清除列表IDC_CLEAR_BUTTONClient edge
    Button加入到IDC_ADD_BUTTONClient edge
    Button加入全部IDC_ADDALL_BUTTONClient edge
    Button退出IDC_EXIT_BUTTONClient edge
    Static edge
    Modal Frame

    属性表中列出的表示“选中”,TAB复选框都要选中,就省略了。组合框可以在DATA属性页中设置项的文本,本例采用这种方法。其数据是:
    中国,美国,俄罗斯,英国,法国,德国,印度,巴基斯坦,
    日本,加拿大,澳大利亚,韩国,伊朗,伊拉克

    逗号处要改为换行,换行用Ctrl+<回车键>。设计好的界面如图chap12-02所示。

    VC++60 <wbr>第十二章 <wbr>列表框和组合框
    chap12-02

     

    12.3 设计变量和编写代码

     

    1 为三个列表框和组合框引进变量
    因为我们要对列表框的项进行操作,所以要申明三个对象类型的变量
    m_myList1
    m_myList2
    m_myCombo。

     

    2 定义一个字符串数组
    定义一个字符串数组m_myItems用来存放组合框的项的文本。在对话框的头文件的类CListCombaDlg的构造函数中申明:
        CString m_myItems[20];

     

    3 给初始化函数编写代码
    在OnInitDialog()中我们要从组合框控件获取项目的文本,给字符串数组m_myItems赋值。再用它的前六项为List1初始化。最后为组合框设置项“中国”为预选项。
    从组合框控件获取项用函数GetLBText(index, str),它把索引值为index的项的文本拷贝给str。给列表框赋值用AddString(string)函数,它在列表的尾部增加一项。类似地还可以用插入函数InsearString(...)。在// TODO: Add extra initialization here 这行的后面,我们添加如下代码:

       int count = m_myCombo.GetCount();  //获取组合框的项数
       int i =0;
        //从组合框控件获取项的文本
        for(i =0; i<count; i++)
             m_myCombo.GetLBText(i, m_myItems[i]);
        //List1初始化,六项
        for(i =0; i<6 ; i++)
            m_myList1.AddString(m_myItems[i]);
        //设置组合框默认选择项为"中国"
        m_myCombo.SetCurSel(0);

     

    4 给4个移动按钮写代码
    MOVE按钮[<]的功能是从List1中得到用户选定顶的索引号,再从这索引号获取选定顶的文本,然后删除这一项,在List2中添加一项。当前项
    获取索引号函数 index=GetCurSel()返回整数。 获取选定项的文本用函数GetText(index, item),它把指定项的文本拷贝到字符串item中。
    OnMoveButton()函数的完整代码如下:

    来源:(http://blog.sina.com.cn/s/blog_5e8a23f90100czpt.html) - VC++60 第十二章 列表框和组合框_东方一峰_新浪博客

    void CListCombaDlg::OnMoveButton()
    {
        CString item;
        int index = m_myList1.GetCurSel(); //获取选定顶索引号
        m_myList1.GetText(index, item);       //获取选定顶的文本
        m_myList1.DeleteString(index);         //删除一项
        m_myList2.AddString(item);              //添加到List2中
        m_myList1.SetCurSel(0);                   //设置首项为当前项
    }

    MOVEALL按钮的代码与上面的类似,加上循环语句就行。

    void CListCombaDlg::OnMoveallButton()
    {
      
      // TODO: Add your control notification handler code here
        CString item;

        int index =0 ;
        while(m_myList1.GetCount() >0){
            m_myList1.GetText(0, item);
            m_myList1.DeleteString(0);
            m_myList2.AddString(item);   
        };
    }
    BACK和BACKALL按钮的代码和上面的一样,只要把m_myList1和m_myList2对调就行。

     

    5 从组合框向列表框1加入当前项的代码
    这与列表框不同的是获取文本的函数名不大一样,用函数GetLBText,其余都相同。在OnAddButton()中加入代码:

    void CListCombaDlg::OnBackallButton()
    {
        // TODO: Add your control notification handler code here
        CString item;
        int index =0 ;
        while(m_myList2.GetCount() >0){
            m_myList2.GetText(0, item);
            m_myList2.DeleteString(0);
            m_myList1.AddString(item);   
        };
    }

    从组合框向列表框1加入全部项的代码如下:

    void CListCombaDlg::OnAddallButton()
    {
       //Clear old items in Linst at first
        CString item;
        while(m_myList1.GetCount()>0)
            m_myList1.DeleteString(0);
        int n = m_myCombo.GetCount();
        //Add all items
        for(int i=0; i<n; i++){
            m_myCombo.GetLBText(i, item);
            m_myList1.AddString(item);
        }   
    }

     

    6 [清除列表]和[退出]按钮的代码

    [清除列表]的按钮的代码:
        while(m_myList1.GetCount()>0)
            m_myList1.DeleteString(0);

    [退出]按钮的代码: OnOK();

     

    12.4 编译和运行

     

    至此,我们完成了界面设计和代码编写,可以编译和Build了。编译通过就可以在运行中测试程序,检查是否满足我们的设计要求。但是,代码编写常常会有许多错误,编译器会报告一大堆错误。虽然指出了错误所在的行,但要明白是什么错误还是很费劲的。如果我们在完成一部分工作后就编译一次,错误就比较少,容易找到和纠正。所以我们分以下几步来编译。
    1、界面完成后编译一次,这时运行可以看到组合框有了信息和可以选择了。
    2、对话框初始化编写后编译和运行一次,这时可以看到列表框有了信息。
    3、MOVE按钮写了代码后编译和运行一次,这时可以测试移动功能是否正确。如果成功,那这代码可以放心地复制到其他三个按钮去了。
    4、全部完成后的编译和运行。

     

    12.5 小结

     

    1 列表框和组合框属性设置中有类型选择
    组合框有三种情况:Simple, Dropdown, Drop List。Simple类型的组合框的列表框部分是固定显示的,不能下拉;而其余两种带一个下拉手柄。设计中别忘记添加滚动条。Dropdown与Drop List的区别是后者的编辑框不能输入。列表框也有三种情况:Simple, Multiple, Extended,它们决定了用户选取项的方法。Simple模式只能够选取单项,Multiple模式可以按Ctrl键+鼠标左键选取多个项,而Extended则可以通过鼠标拖处矩形一次选取连续的项,也可以加按Ctrl键作多次选择。

    2 列表框在属性页不能设置项的文本(字符串),而组合框能。

    3 列表框和组合框中的“项”都有索引号(0,1,2,...)和文本(在窗口显示)。两者都有成员函数来获取和设置这些信息。得到文本的函数名称不一样,列表框是GetText(),组合框是GetLBText()。字母LB的意思是ListBox,GetLBText的意思是“从自身的列表框中获取文本”。

    4 列表框和组合框常用的几个函数原型

    列表框的取索引号和文本的函数原型
    获取文本:
    void GetText( int nIndex, CString& rString ) const;
    用于单选模式的获取和设置索引号:
    int GetCurSel( ) const;
    int SetCurSel( int nSelect );
    用于多选模式的:
    int GetSel( int nIndex ) const;
    上式如果nIndex项是被选中的,就返回它的索引号,否则返回0。
    int SetSel( int nIndex, BOOL bSelect = TRUE );
    bSelect = TRUE就选中索引为nIndex的项,如是FALSE,则取消“选中”:如果nIndex=-1,就是全“选中”或全“不选中”。

    组合框的获取索引号和文本的函数原型
    int GetCurSel( ) const;
    int SetCurSel( int nSelect );
    void GetLBText( int nIndex, CString& rString ) const;

    添加、插入和删除项的函数原型
    int AddString( LPCTSTR lpszItem );
    int InsertString( int nIndex, LPCTSTR lpszItem );
    int DeleteString( UINT nIndex );

     

    展开全文
  • Access-控件解析-组合-01-下拉列表

    千次阅读 2019-04-03 20:35:44
    微信公众号原文 系统:Windows 7 软件:Excel 2010 / Access 2010 这个系列介绍常用的控件 ...手动设置组合下拉列表:长江;黄河;珠江;淮河 通过代码修改组合下拉列表:1;2;3;4 应用场景,组合的下拉...
  • 若依thymeleaf回显复选选中项演示以及实现方法1.演示图片2. 实现方法3. 详解4.思路来源5.经验总结 演示以及实现方法 1.演示图片 2. 实现方法 下面展示一些 实现代码,th:xxx是thymeleaf的相关语法,@dict是若依...
  • Vue框架

    万次阅读 多人点赞 2021-10-18 19:46:20
    script> 2.2.5、下拉列表 <div id="app"> 城市: <select name="city" v-model="selected"> <option value="" disabled>---请选择---option> 河南option> 洛阳option> 伊川option> select> 选中了:{{selected}}p> ...
  • python删除列为空的的实现方法

    千次阅读 2021-02-10 01:25:19
    python删除列为空的的实现方法发布时间:2020-07-17 17:26:54来源:亿速云阅读:112作者:小猪这篇文章主要讲解了python删除列为空的的实现方法,内容清晰明了,对此有兴趣的小伙伴可以学习一下,相信大家阅读完...
  • R语言基础:数组和列表数组(array) 一维数据是向量,二维数据是矩阵,数组是向量和矩阵的直接推广,是由三维或三维以上的数据构成的. 数组函数是array(),语法是:array(dadta, dim),其中data必须是同一类型的数据...
  • JIRA配置手册 (1):问题类型管理

    千次阅读 2018-08-16 08:00:00
    作者:Misha 来源:原力注入你想学习Java ?资源都在这里,点击查看最近在工作中频繁接触Jira,从一脸懵逼的小白摸索成为一个准管理员,爬了不少坑,特此整理如下,望...
  • YOLO框架简述

    万次阅读 多人点赞 2019-06-14 11:08:48
    YOLO(You Only Look Once)是一种基于深度神经网络的对象识别和定位算法,其最大的特点是运行速度... 输入一张图片,要求输出其中所包含的对象,以及每个对象的位置(包含该对象的矩形)。 对象识别和定位...
  • 2、打开“数据验证”对话框,在“设置”选项卡的“允许”下拉列表中选择“序列”选项,在“来源”文本框中输入项目名称。 注意: 这里必须勾选“提供下拉箭头”复选。同时,在“来源”文本框中输入多个项目时,...
  • 一、根据列条件,获取索引号并转成列表 #在dataframe中根据一定的条件,得到符合要求的某些元素所在的位置 import pandas as pd df = pd.DataFrame({'BoolCol': [1, 2, 3, 3, 4],'attr': [22, 33, 22, 44, 66]...
  • 深度框架 MXNet/Gluon 初体验

    万次阅读 多人点赞 2018-05-17 14:26:27
    init是数据来源,Normal类即正态分布,sigma是正态分布的标准差; ctx是上下文,表示训练中参数更新使用CPU或GPU,如mx.cpu(); Gluon的Sequential类与其他的深度学习框架类似,通过 有序地 连接不同的操作...
  • 牛逼!Java 从入门到精通,超全汇总版

    万次阅读 多人点赞 2021-05-06 19:40:33
    所以综上所述,入门 Java 你需要掌握的基础知识有 Java 基本介绍 Java 有哪些特点 什么是 Java 开发环境 Java 开发环境配置(初学者建议 Eclipse) 这里就需要区分不同的电脑类型了,一种是 Mac ,一种是 Windows,...
  • 这几天基于react写了一个小demo测试,主要实现的功能是:在... 可能样式没怎么调,看着有点别扭,表格样式扒的是菜鸟教程上的,觉得还的也可以用这个样式哦,或者改成自己喜欢的即可,最重要的是功能实现就好...
  • Scrapy框架的使用之Scrapy通用爬虫

    万次阅读 多人点赞 2018-05-26 10:12:13
    我们要抓取新闻列表中的所有分页的新闻详情,包括标题、正文、时间、来源等信息。 四、新建项目 首先新建一个Scrapy项目,名为scrapyuniversal,如下所示: scrapy startproject scrapyuniversal 创建一个...
  • 组合框控件是我们工作中用得很频繁的一个控件,其实就是把一个编辑框和列表框组合在一起。 适用范围:当你有多个同级选项时,你又不想创建很多个单选框按钮,这时,组合框就能帮你完成这个复杂的创建过程。 组合框...
  • VFP6.0第7章表单设计与应用及答案 一填空题 1根据表单数据...图片按钮无按钮和定制4种类型 4表单文件默认的扩展名为.scx_ 5表单属性窗口由对象列表框选项卡_属性设置框属性列表框和_属性说明信息_组成 6根据VisualFox
  • 与 JS 代码约定的 String 类型识别 name,JS 端通过 AppRegistry.registerComponent 方法设置这个 name,Java 端重写基类的 getMainComponentName 方法设置这个 name,这样两边入口就对上了。 3. launchOptions...
  • 可通过编写 SQL、Procedure 作为数据来源进行构建不同类型的图形报表。 10.提供工作流引擎组件,开发者可以直接在开发框架中使用自定义表单来承载业务数据进行流程审批;也可以编写代码完成复杂表单然后调用流程引擎...
  • 选择要设置的条码类型是国标码还是内部码 单击来源...如需对当前查询出来的列表中所有条码进行填充或替换单击生成条码否则就不需要进行此操作 * 条码登记条码规则设置 选中需要修改的单击修改 在列表下方的字段内修
  • 可通过编写SQL、Procedure作为数据库来源进行构建不同类型的图形报表。 9. 提供工作流引擎组件,开发者可以直接在开发框架中使用自定义报表来承载业务数据进行流程审批;也可以编写代码完成复杂表单然后调用流程...
  • GIS软件列表

    万次阅读 2016-09-05 21:36:07
    Pentaho数据集成(Kettle)是一个功能强大的、元数据驱动的ETL(抽取、转换和加载)工具,致力于不同数据来源间的聚合。 GeoNetwork OpenSource :一个空间数据元数据的门户网站,实现国际地理元数据标准...
  • .py文件来源于: https://github.com/fchollet/deep-learning-models/blob/master/vgg16.py VGG16默认的输入数据格式应该是:channels_last # -*- coding: utf-8 -*- '''VGG16 model for Keras. # ...
  • 参与者按照事先准备好的列表,提出他们不理解的术语和认为不正确的术语。文档编写组的代表必须回答每个质疑,要么承认确实有错误,要么对质疑做出解释。 (2) 文档驱动法。文档编写者向走查组成员仔细解释文档。...
  • 10个python办公黑科技,助你办公效率提高100倍

    万次阅读 多人点赞 2021-06-02 11:46:55
    OK,记录条数共计:'+str(len(read_list))) 此时已经完成了主要功能的编写,那么接下来就应该接受用户输入 文件路径、文件保存路径、sheetname、列名 以及对原始数据用换符 “\n” 作为列表分隔符,调用部分完整...
  • 来源:Yury Zhauniarovich | Publications 译者:飞龙 协议:CC BY-NC-SA 4.0 如我们在第1.2节中所描述的那样,应用程序框架级别上的安全性由 IPC 引用监视器实现。 在 4.1 节中,我们以 Android 中使用的...
  • 我有一个称为df的数据.它具有称为“规范类型”的列.使用大熊猫df['Spec Type']0 NaN1 A12 G7V3 F7+K4. .. .169 A0e我只想为每个条目获取第一个字符,并将其作为df的新列称为“规范类型索引”.但是,以下代码给我一个...
  • Learun敏捷开发框架已经内置了工作流引擎、自定义表单引擎、即时通讯模块再配合框架完善的权限管理模块,可以轻松地定制协同办公软件,OA、HRM、KM等系统的开发将变得非常简单甚至不需要编写一代码。 三、电商...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 75,886
精华内容 30,354
关键字:

列表框的行来源类型