我有一个很大的列名df
,其中包含对调查问题的回答数据,并且能够执行以下操作:
- 将每列转换为数据帧并存储在列表
x
中 - 创建一个单独的列表
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)))