似乎在访问具有1列的表时,访问的操作会抛弃列信息.如果有超过1列,则保留此信息.
例如
表中有1个项目:
> example1 <- data.frame( items = c("A","B","B","C","C","C","C")
+ , time = ISOdate(2222,1,1) )
> table1 <- table(example1)
> table1
time
items 2222-01-01 12:00:00
A 1
B 2
C 4
> barplot(table1, legend=T)
> table1.ordered <- table1[c(3,2,1),] # reorder
> table1.ordered
C B A
4 2 1
> barplot(table1.ordered, legend=T) # time column thrown away
Run Code Online (Sandbox Code Playgroud)
现在表中有2个项目 :( 在此示例中添加到example1)
> example2 <- rbind(example1 , data.frame(items = NA, time = ISOdate(3333,1,1)) )
> example2
items time
1 A 2222-01-01 12:00:00
2 B 2222-01-01 12:00:00
3 B 2222-01-01 12:00:00
4 C 2222-01-01 12:00:00
5 C 2222-01-01 12:00:00
6 C 2222-01-01 12:00:00
7 C 2222-01-01 12:00:00
8 <NA> 3333-01-01 12:00:00
> table2 <- table(example2)
> table2
time
items 2222-01-01 12:00:00 3333-01-01 12:00:00
A 1 0
B 2 0
C 4 0
> table2.ordered <- table2[c(3,2,1),] #Again, reorder
> table2.ordered
time
items 2222-01-01 12:00:00 3333-01-01 12:00:00
C 4 0
B 2 0
A 1 0
> barplot(table2.ordered, legend=T) #displays how I expected
Run Code Online (Sandbox Code Playgroud)
旧的默认drop=TRUE问题......
重新排序的结果是表格被转换为向量.如果你看一下它的结构table1,你会发现它实际上是一个带有一列(计数)的矩阵,时间和项目都是维度的名称.这些是属性,而不是矩阵的一部分.
使用重新排序也将使用默认drop=TRUE从[功能.因此只有一列的矩阵被转换为矢量.随后,也会删除列(时间)的name属性.
您可以通过以下方式避免此
table1.ordered <- table1[c(3,2,1),,drop=FALSE] # reorder
table1.ordered
time
items 2222-01-01 12:00:00
C 4
B 2
A 1
Run Code Online (Sandbox Code Playgroud)
该参数drop=TRUE允许[函数下降维数为1.在这种情况下,矩阵被简化为向量.如果您不希望发生这种情况,则必须使用drop=FALSE.另一个例子 :
> X <- matrix(1:4,ncol=2)
> X[,1]
[1] 1 2
> X[,1,drop=FALSE]
[,1]
[1,] 1
[2,] 2
Run Code Online (Sandbox Code Playgroud)