R_6rh 数据的基本处理2

1.     数据类型的转换

 

名为is.datatype的函数是判断其类型T或者F。名为as.datatype则是将其转换为对应的类型。

> a <- c(1,2,3)

> is.numeric(a)

[1] TRUE

> is.vector(a)

[1] TRUE

> is.array(a)

[1] FALSE

> a<- as.character(a)

> a

[1] "1""2" "3"

> is.character(a)

[1] TRUE

 

2.     数据排序

 

使用order()函数可以对一个数据框进行排序,默认的排序顺序是升序,在排序变量前面加一个减号即可降序。

 

> newdata <- leadership[order(gender,age),]
> newdata
  manager     data country gender age q1 q2 q3 q4 q5
3       3  10/1/08      UK      F  25  3  5  5  5  2
2       2 10/28/08      US      F  45  3  5  2  5  5
5       5   5/1/09      US      F  99  2  2  1  2  1
1       1 10/24/08      US      M  32  5  4  5  5  5
4       4 10/12/08      UK      M  39  3  3  4 NA NA
> newdata <- leadership[order(gender,-age),]
> newdata
  manager     data country gender age q1 q2 q3 q4 q5
5       5   5/1/09      US      F  99  2  2  1  2  1
2       2 10/28/08      US      F  45  3  5  2  5  5
3       3  10/1/08      UK      F  25  3  5  5  5  2
4       4 10/12/08      UK      M  39  3  3  4 NA NA
1       1 10/24/08      US      M  32  5  4  5  5  5

 

这里要注意在order(gender,-age),有一个逗号,不能忽视。

有关排序的问题书上讲解略微简略,希望在以后能得到补充。

 

3.     数据集的合并

 

如果需要横向合并两个数据框,使用merge()函数,

 

> a_data_frame <- data.frame(x= letters[1:5],y= rnorm(5),z=runif(5)>0.5)
> a_data_frame
  x          y     z
1 a -0.4173760 FALSE
2 b  0.6969445 FALSE
3 c -1.0920196  TRUE
4 d  0.2629294  TRUE
5 e -0.9772492 FALSE
> another_data_frame <- data.frame(z= rlnorm(5), y= sample(5),x= letters[3:7])
> another_data_frame
          z y x
1 1.9464695 5 c
2 0.8450900 3 d
3 1.4593505 1 e
4 0.7406191 4 f
5 1.1054632 2 g
> merge(a_data_frame,another_data_frame,by= "x")
  x        y.x   z.x      z.y y.y
1 c -1.0920196  TRUE 1.946469   5
2 d  0.2629294  TRUE 0.845090   3
3 e -0.9772492 FALSE 1.459350   1

 

merge( 内使用by = “x” )即锁定x为共享ID 列,因为在这种情况下默认的all=FALSE,如果这时使用all =TRUE,则会

> merge(a_data_frame,another_data_frame,by= "x",all = TRUE)
  x        y.x   z.x       z.y  y.y
1 a -0.4173760 FALSE        NA  NA
2 b  0.6969445 FALSE        NA  NA
3 c -1.0920196  TRUE 1.9464695   5
4 d  0.2629294  TRUE 0.8450900   3
5 e -0.9772492 FALSE 1.4593505   1
6 f         NA    NA   0.7406191   4
7 g         NA    NA   1.1054632   2
 
这既是aanother的并集,而默认情况下,all=FALSE,即使aanother的交集。 aanother merge时使用by可以取多个ID,这时就会有使其多个交集相同情况下的最终的交集。

 行和列的合并

 

使用cbind可以横向合并,rbind可以纵向合并。为了方便理解,可以cbind为 col bind 级列锁定,这时即列不动,横向合并。 rbind是row bind ,行锁定,这时行不动,列合并。

 

4.     数据集的提取

 

4.1  选入保存的变量

 

可以通过data.frame[row,column]来进行选择变量,比如

> newdata <- leadership[,c(6:10)]
> newdata
  q1 q2 q3 q4 q5
1  5  4  5  5  5
2  3  5  2  5  5
3  3  5  5  5  2
4  3  3  4 NA NA
5  2  2  1  2  1

 

这里就选择了第6列到第10列的相关变量。在行选择使用逗号则表示默认选择所有行。

 

如果你已知列名或者行名,则可以通过定义一个向量再通过向量进行[ ] 来进行变量选择。

 

比如:

> myvars <- c("q1","q2")
> leadership[myvars]
  q1 q2
1  5  4
2  3  5
3  3  5
4  3  3
5  2  2

 

这里myvars 定义了向量是列名q1、q2 。 如果只是选择一个变量的话可以使用

> leadership["q1"]
  q1
1  5
2  3
3  3
4  3
5  2

 

在这里需要注意q1 是字符型数值,所以需要在其加引号。

 

同样你也可以使用paste 来定义myvars向量

 

> myvars <- paste("q" , 1:5 , sep="")
> leadership[myvars]
  q1 q2 q3 q4 q5
1  5  4  5  5  5
2  3  5  2  5  5
3  3  5  5  5  2
4  3  3  4 NA NA
5  2  2  1  2  1

 

有关paste函数在书后续章节会详细解释。这里点到为止。

 

4.2  删除变量

 

删除变量最简单的方法就是使用 - ,比如:

> newdata <- leadership[c(-8,-9)]
> newdata
  manager     data country gender age q1 q2 q5
1       1 10/24/08      US      M  32  5  4  5
2       2 10/28/08      US      F  45  3  5  5
3       3  10/1/08      UK      F  25  3  5  2
4       4 10/12/08      UK      M  39  3  3 NA
5       5   5/1/09      US      F  99  2  2  1

 

这时 第8列和第9列就删除掉了。

 

同样我们可以通过
> myvars <- names(leadership) %in% c("q3","q4")
> myvars
 [1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE  TRUE  TRUE FALSE

 

names函数定义了所有的leadership的名称,而%in%如下所示:

 

%in%
用法 a %in% table
a值是否包含于table中,为真输出TURE,否者输出FALSE
 
所以我们返回的值是除了q3q4 两列均为false,即不包括。
 
然后我们在再通过:
 
> newdata <- leadership[!myvars]
> newdata
  manager     data country gender age q1 q2 q5
1       1 10/24/08      US      M  32  5  4  5
2       2 10/28/08      US      F  45  3  5  5
3       3  10/1/08      UK      F  25  3  5  2
4       4 10/12/08      UK      M  39  3  3 NA
5       5   5/1/09      US      F  99  2  2  1
 
这里含义表达是!myvars ,即非myvars所以就把q3q4 剔除掉了。所以我们在检索时也可以通过逻辑值来判断。
 
同样我们可以通过
 
leadership$q3 <- leadership$q4 <-NULL 也可以达到此效果
 
4.3      选入观测
 
我们可以通过一些逻辑判断来选择需要观测的种类,
 
比如;
> newdata <- leadership[1:3,]
> newdata
  manager     data country gender age q1 q2 q3 q4 q5
1       1 10/24/08      US      M  32  5  4  5  5  5
2       2 10/28/08      US      F  45  3  5  2  5  5
3       3  10/1/08      UK      F  25  3  5  5  5  2
 
选取了前三行, 13后的逗号表示默认保存每一列。
 
> newdata <- leadership[leadership$age >30&leadership$gender == "M",]
> newdata
  manager     data country gender age q1 q2 q3 q4 q5
1       1 10/24/08      US      M  32  5  4  5  5  5
4       4 10/12/08      UK      M  39  3  3  4 NA NA
 
这里同样可以看出需要观测的是大于30岁并且为男性的数据,同样需要记住在选取观测时要加入逗号保存所有列。同样我们可以通过with来进行相同的提取观测:
> with(leadership, newd  <<- leadership[gender == "M"&age>30,])
> newd
  manager     data country gender age q1 q2 q3 q4 q5
1       1 10/24/08      US      M  32  5  4  5  5  5
4       4 10/12/08      UK      M  39  3  3  4 NA NA
 
with的局限在于其只在with内生效,如果需要永久赋值则需要<<- ,同时你也可以通过attach来进行提取。
 
书中还提供了对于leadership中提取date200911日到20091231日之间的变量,可以通过以下方法:
> leadership$data <- as.Date (leadership$data, "%m/%d/%y")
> startdate <- as.Date("2009-01-01")
> enddate <- as.Date("2009-12-31")
> 
> newdata <- leadership[which(leadership$data >=startdate&leadership$data<= enddate),]
> newdata
  manager       data country gender age q1 q2 q3 q4 q5
5       5 2009-05-01      US      F  99  2  2  1  2  1
 
先使用as.Date leadershipdate变量变为时间变量,然后再通过设定将startdateenddate 均定义为时间变量,由于时间变量默认为yyyy-mm-dd,所以不需要在使用相关的格式,然后通过甄选使用which函数ji可提取相应的值。
 
4.4      subset函数
 
使用subset函数可以快速的选择变量
比如:
> news <- subset(leadership,age>=35|age <24,select = c(q1,q2,q3,q4,q5))
> news
  q1 q2 q3 q4 q5
2  3  5  2  5  5
4  3  3  4 NA NA
5  2  2  1  2  1
 
subset定义了年纪大于35或者小于24,并保留了变量q1q5
或者
> new2 <- subset(leadership,gender == "M" &age >25 , select = gender:q3)
> new2
  gender age q1 q2 q3
1      M  32  5  4  5
4      M  39  3  3  4
 
保留了genderq3的所有列。
4.5      sample
 
> mysample <- leadership[sample(1:nrow(leadership),3,replace = FALSE),]
> mysample
  manager       data country gender age q1 q2 q3 q4 q5
1       1 2008-10-24      US      M  32  5  4  5  5  5
5       5 2009-05-01      US      F  99  2  2  1  2  1
3       3 2008-10-01      UK      F  25  3  5  5  5  2
 
sample1nrowleadership),3replace=FALSE)表示在leadership行中抽取一个从第一到其最后一行,随机抽取三个,无放回的行值,然后通过leadership来提取其整行。
 
 
 
 
 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值