8.2 喀迈拉(no.41~no.44)

本文探讨了R语言中数据框与矩阵的操作差异,包括数据框列名冲突、cbind函数行为特性、数据框行数量一致性及数据框内嵌矩阵的表现形式。通过具体实例展示了这些操作可能产生的意外结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

8.2 喀迈拉(no.41~no.44)

8.2.41 列明冲突

这是一个期望受挫的例子:

> one.col.mat <- cbind(matname=letters[1:3])
> one.col.mat
     matname
[1,] "a"
[2,] "b"
[3,] "c"
> data.frame(x=one.col.mat)
  matname
1 a
2 b
3 c
> data.frame(x=cbind(letters[1:3]))
  x
1 a
2 b
3 c

当进行data.frame调用时对每一个条目使用一个标签,期望在输出的相关列会是那个名字。然而,列的名字已经取得了优先权。

同样注意数据框包含一个因子列而不是字符列。

8.2.42 cbind喜欢矩阵

如果你要cbind两个矩阵,你会得到一个矩阵。如果你要cbind两个数据框,你会得到一个数据框。如果你要cbind两个向量,你会得到一个矩阵。

> is.matrix(cbind(x=1:10, y=rnorm(10)))
[1] TRUE

如果你要一个数据框,那就是用函数data.frame

> dfxy <- data.frame(x=1:10, y=rnorm(10))

8.2.43 数据框等价于行的数量

数据框是以列表的形式实现的。但有一点和列不同—每一个组件必须有相同的行。如果你够努力,你或许可以实现一个破坏此规则的数据框。更可能的结果是你的挫败感将来在于R将会阻止你获得如此荒谬的结果。

8.2.44 矩阵在数据框中

让我们创建两个数据框:

>ymat <- array(1:6, c(3,2))
>xdf6 <- data.frame(X=101:103, Y=ymat)
>xdf7 <- data.frame(X=101:103)
>xdf7$Y <- ymat
>xdf6
   X  Y.1 Y.2
1 101  1   4
2 102  2   5
3 103  3   6
> xdf7
   X  Y.1 Y.2
1 101  1   4
2 102  2   5
3 103  3   6
> dim(xdf6)
[1] 3 3
> dim(xdf7)
[1] 3 2

输出是完全一样的。但是很清楚,它们有不同的维度。

> xdf6[, ’Y.1’]
[1] 1 2 3 
> xdf7[, ’Y.1’]
Error in "[.data.frame"(xdf7, , "Y.1") :
undefined columns selected
> xdf6[, ’Y’]
Error in "[.data.frame"(xdf6, , "Y") :
undefined columns selected
> xdf7[, ’Y’]
    [,1] [,2]
[1,]  1   4
[2,]  2   5
[3,]  3   6

xdf6包含Y.1Y.2组件。xdf7并不包含这样的组件(除了它使怎样输出的)—它有一个含有两个列的矩阵组件Y

你将会确定地知道允许一个数据框还有多于一列的组件是令人厌恶的。除非你是这样想的,当然,你将会有机会看到它是非常有用的。这个特点值得你去迷惑,但是改变输出将会减少迷惑。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值