在子集化之后将单个圆柱形数据帧转换为向量的原因

时间:2016-06-08 14:15:58

标签: r dataframe subset

我有一个圆柱形数据框架结构。基于条件,我在运行时期间对数据帧进行了子集化。我观察到数据帧在子集化后被转换为向量。我使用as.data.frame()函数重新获得了数据框结构。

# random generation of the values    
df <- data.frame(a=sample(1:1000,100))
#checking the class of the object
class(df)
#dimensions
dim(df)
#[1] 100   1
#subsetting the data with a random value present in the df, here 547
df_sub <- df[-df$a==547,]
# checking the subset dataset class
class(df_sub)
#[1] "integer"

我想知道如何在不明确使用as.data.frame()函数的情况下保留数据框架结构。

3 个答案:

答案 0 :(得分:6)

R经常尝试在子集化后简化对象。如果不需要,可以使用drop = FALSE参数来防止这种简化:

df_sub <- df[-df$a==547,, drop=FALSE]

> class(df_sub)
[1] "data.frame"

drop = FALSE也适用于矩阵:

myMat <- matrix(1:10, 5)

> class(myMat[, 1])
[1] "integer"
> 
> class(myMat[, 1, drop=FALSE])
[1] "matrix"
> 
> class(myMat[1, ])
[1] "integer"
> 
> class(myMat[1, , drop=FALSE])
[1] "matrix"

答案 1 :(得分:2)

您可以使用ENSG00000000001:E4 1 ENSG00000000003:E5 1 ENSG00000000002:E6 1 ENSG00000000003:E6 1 ENSG00000000002:E5 0

subset

答案 2 :(得分:2)

使用以下示例时,子集的类仍为data.frame

set.seed(1)
df <- data.frame(a = sample(1:1000,100), b = sample(1:1000,100))
class(df)
#data.frame
df_sub <- df[-df$a == 706,]
class(df_sub)
#data.frame

在您的情况下,您有一个100x1 data.frame,它将自动解释为向量。在我的示例中,它仍然是data.frame

如果您想保留data.frame,则必须使用:

df_sub <- subset(df, a != 706)

此致

J_F