当我将矩阵子集化为单个列时,结果是类数字,而不是矩阵(即myMatrix [,5]到第五列的子集).是否有一种紧凑的方法可以将单个列子集化,维护矩阵格式,并维护行/列名称,而无需执行以下操作:
matrix( myMatrix[ , 5 ] , dimnames = list( rownames( myMatrix ) , colnames( myMatrix )[ 5 ] )
Run Code Online (Sandbox Code Playgroud) 假设我们想要逐行访问数据.示例是简化的,但是当按行名称排序数据框时,例如,(df[order(row.names(df)])我们使用相同的技术.
如果数据框有一列,我们得到一个原子向量:
> df
x1
a x
b y
c z
> df[1, ] # returns atomic vector
[1] x
Run Code Online (Sandbox Code Playgroud)
如果数据框有两列,我们会返回包含行名的1行数据帧:
> df
x1 x2
a x u
b y v
c z w
> df[1, ] # returns data frame
X1 X2
a x u
Run Code Online (Sandbox Code Playgroud)
我不明白为什么数据帧上的相同操作会产生两种类型的结果,具体取决于帧的列数.
似乎在访问具有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 …Run Code Online (Sandbox Code Playgroud)