为什么我的最后一步是将数据框转换为矢量?我想在数据框key
中保留前6000个观测值。
set.seed(1)
key <- data.frame(matrix(NA, nrow = 10000, ncol = 1))
names(key) <- "ID"
key$ID <- replicate(10000,
rawToChar(as.raw(sample(c(48:57,65:90,97:122), 8, replace=T))))
key <- unique(key) # still a data frame
key <- key[1:6000,] # no longer a data frame
答案 0 :(得分:2)
key1 <- key[1:6000,,drop=F] #should prevent the data.frame from converting to a vector.
根据?Extract.data.frame
drop:逻辑。如果为“TRUE”,则结果强制为最低 可能的维度。如果只有一个,则默认为丢弃 如果只剩下一行,则保留列,但不要删除。
或者,您可以使用subset
,但通常情况下,这有点慢。这里的row.names是从1
到10000
key2 <- subset(key, as.numeric(rownames(key)) <6000)
is.data.frame(key2)
#[1] TRUE
因为,
## S3 method for class 'data.frame'
subset(x, subset, select, drop = FALSE, ...) #by default it uses drop=F
答案 1 :(得分:0)
它被强制转换为一个向量,主要是因为当只有一个元素时它可以和that's the default强制。 R试图“乐于助人”。
这会将其保留为数据框:
set.seed(1)
key <- data.frame(matrix(NA, nrow = 10000, ncol = 1))
names(key) <- "ID"
key$ID <- replicate(10000,
rawToChar(as.raw(sample(c(48:57,65:90,97:122), 8, replace=T))))
key <- unique(key)
key <- as.data.frame(key[1:6000,]) # still a data frame