我有一个圆柱形数据框架结构。基于条件,我在运行时期间对数据帧进行了子集化。我观察到数据帧在子集化后被转换为向量。我使用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()
函数的情况下保留数据框架结构。
答案 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