R:关于数据框的函数


►关于函数rbind()和cbind()

    矩阵函数rbind()和cbind()也同样可以用于数据框,前提是两个数据框有相同的行数或者列数。例如,可以用cbind()向数据框中添加新的列,要求新的列与原有的列长度相同。用rbind()添加新行的时候,添加的行通常是数据框或者列表的形式。

> kids <- c( "Jack", "Jill" )

> ages <- c( 12, 10 )

> d <- data.frame( kids, ages, stringsAsFactors=FALSE )

> d

  kids ages1

 Jack   122

 Jill   10

> rbind( d, list( "Laura", 19 ) )

   kids ages1

  Jack   122

  Jill   103

  Laura   19

 

►合并数据框

    在关系型数据库的世界里,最重要的一个操作数合并,两张表根据某个变量的值组合到一起。相似的,R语言里两个数据框也可以用merge()函数合并在一起。

    最简单的形式如下:merge( x,y )

    假设数据框x和y有一个或多个同名的列,上面这条语句可以合并这两个数据框。例子如下:

> kids <- c( "Jack", "Jill", "john", "Lily" )

> states <- c( "CA", "MA", "MA", "HI" )

> d1 <- data.frame( kids, states, stringsAsFactors=FALSE )

> ages <- c( 12, 10, 18, 24 )

> kids <- c( "Jack", "Jillian", "john", "Lucy" )

> d2 <- data.frame( ages, kids, stringsAsFactors=FALSE )

> merge( d1, d2 )

  kids states ages1

 Jack     CA   122

 john     MA   18

    这两个数据框都有变量kids。R在两个数据框里查找kids变量值相同的行,再用查找到的行和两个数据框里所有列,创建新的数据框。

 

    函数merge()有两个参数by.x和by.y,用于标示出两个数据框里含有相同信息但名称不同的两个变量。例子如下:

> kids <- c( "Jack", "Jill", "john", "Lily" )

> states <- c( "CA", "MA", "MA", "HI" )

> d1 <- data.frame( kids, states, stringsAsFactors=FALSE )

> ages <- c( 12, 10, 24 )

> pals <- c( "Jack", "Jillian", "Jill" )

> d3 <- data.frame( ages, pals, stringsAsFactors=FALSE )

> merge( d1, d3, by.x="kids", by.y="pals" )

  kids states ages1

 Jack     CA   122

 Jill     MA   24

注:虽然在两个数据框里,两个变量一个名为kids,一个名为pals,但两个变量包含相同的信息,所以这样合并是有意义的。

 

    重复匹配会在结果中全部出现,有时会得到错误的结果。

 

►在数据框上应用lapply()函数和sapply()函数

    数据框是列表的特例,数据框的列构成了列表的组件。在数据框上应用lapply()函数,指定函数是f()。f()函数会作用域数据框的每一列,然后将返回值置于一个列表中。

> kids <- c( "Jack", "Jill", "john" )

> states <- c( "CA", "MA", "HI" )

> d <- data.frame( kids, states, stringsAsFactors=FALSE )

> lapply( d, sort )

$kids

[1] "Jack" "Jill" "john" 


$states

[1] "CA" "HI" "MA"

注:结果是由两个向量构成的列表,这两个向量是排序后的kids和states。结果只是列表,而不是数据框,可以把它强制转化为数据框。

> as.data.frame( lapply( d, sort ) )

  kids states1

 Jack     CA2

 Jill     HI3

 john     MA

注:该例子没有实际意义,已丢失了名字和住址的对应关系。

 

 

 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值