r-将列转换为数据帧列表并维护名称



我有一个很大的列名df,其中包含对调查问题的回答数据,并且能够执行以下操作:

  1. 将每列转换为数据帧并存储在列表x
  2. 创建一个单独的列表y,其中包含每个数据帧的表

Dput:

df <- structure(list(`A question` = c("3", "4", "1", "3", "4", "3"), 
`Some other question` = c("4", "4", "1", "3", "0", "3"), 
`Other kind of question` = c("4", "3", "1", "4", "5", "4"
)), row.names = c(NA, -6L), class = c("tbl_df", "tbl", "data.frame"
))

代码:

x <- lapply(df,as.data.frame)

y <- lapply(1:length(x),
function(i){
x[[i]] <- table(as.data.frame(x[[i]]))
})

我的问题是,在调用lapply创建y时,如何维护每个df的名称(如x中所示(

对于OP是需要每列的数据帧/tbl_df的list还是只需要table输出,目前还不太清楚。对于第一种情况,我们可以使用split.default

lst1 <- split.default(df, seq_along(df))

如果我们想使用lapply,而不是在列上循环,请在列索引上循环或命名

lapply(names(df), function(nm) df[nm])

如果我们需要table

lapply(df, table)
#$`A question`
#1 3 4 
#1 3 2 
#$`Some other question`
#0 1 3 4 
#1 1 2 2 
#$`Other kind of question`
#1 3 4 5 
#1 1 3 1 

或者,如果需要转换为data.frame,用as.data.frame包裹

lapply(df, function(x) as.data.frame(table(x)))

最新更新