[英]How to delete first level of headers of a Dataframe in R?
我從聚合函數創建了一個數據框。 數據幀的長度為兩個。 但是,當我打印出數據框時,會出現5列。 R如何處理數據幀中的標頭和子標頭? 如果是這種情況,我如何擺脫頭文件的第一級?
d <- data.frame("User id"=c(1,1,2,3,1),
block=c("north","south","east","west","south"), check.names = F)
f <- function(l, vec) {
vec[l] <- 1
vec
}
vec <- setNames(rep(0, 4), levels(d$block))
df <- aggregate(block~`User id`, d, f, vec)
這些輸出使我感到困惑:
>names(df)
[1] "User id" "block"
> df
User id block.east block.north block.south block.west
1 1 0 1 1 0
2 2 1 0 0 0
3 3 0 0 0 1
這就是我想要的:
> names(df)
> "User id" "block.east" "block.north" "block.south" "block.west"
我們可以用table
更輕松地做到這一點
out <- as.data.frame.matrix(+(table(d) > 0))
names(df) <- paste0("block.", names(df))
關於OP輸出中的問題,它是一個matrix
列,
str(df)
#'data.frame': 3 obs. of 2 variables:
# $ User id: num 1 2 3
# $ block : num [1:3, 1:4] 0 1 0 1 0 0 1 0 0 0 ...
# ..- attr(*, "dimnames")=List of 2
# .. ..$ : NULL
# .. ..$ : chr "east" "north" "south" "west"
因此我們可以將其轉換為常規data.frame
df <- do.call(data.frame, df)
names(df)
#[1] "User.id" "block.east" "block.north" "block.south" "block.west"
str(df)
#'data.frame': 3 obs. of 5 variables:
# $ User.id : num 1 2 3
# $ block.east : num 0 1 0
# $ block.north: num 1 0 0
# $ block.south: num 1 0 0
# $ block.west : num 0 0 1
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.