我已经使用split()按特定列的级别将大型数据框拆分为数据框列表,现在正尝试使用Corpus()函数将每个数据框分配到其自己的语料库对象中,但是无法获得所需的结果。
我尝试创建一个与数据帧列表长度相同的随机规范列表,重命名规范列表中的每个元素,将数据帧列表中的每个元素转换为语料库对象,并将每个元素分配给在规范列表中重新命名变量。
df <- data.frame("A" = 10:12, "B" = c(1, 1, 2)) # create example df
split_df <- split(df, f = df$B, drop = T) # split df by B col
names(split_df) <- c("df1", "df2") # rename dfs
split_df
> split_df
$df1
A B
1 10 1
2 11 1
$df2
A B
3 12 2
y <- as.list(rnorm(length(split_df))) # create list of norms length of df list
names(y) <- paste("corpus", 1:length(y), sep="_") # rename elements of list
# iterate over list and assign same column of each df to individual corpus
for(i in 1:length(y)){
y[i] <- Corpus(VectorSource(split_df[[i]]$A))
}
list2env(y, envir = .GlobalEnv)
基本上,我希望能够使用自己的唯一名称创建多个语料库对象(与数据框列表中的数据框一样多),而不必手动为其中的每个数据框键入变量名+ Corpus()代码一列104个数据帧。
# actual result:
y[1]
> y[1]
$corpus_1
[1] "10" "11"
# expected result:
works_1 <- Corpus(VectorSource(split_df[[1]]$A))
works_1
> works_1
<<SimpleCorpus>>
Metadata: corpus specific: 1, document level (indexed): 0
Content: documents: 2
对于列表中的104个独立df,每个都有自己的名称,我该如何重现上述预期结果?即(corpus_1,corpus_2,...,corpus_104)?
非常感谢。
答案 0 :(得分:1)
lapply
是必经之路。
library(tm)
# create list of corpi
all_corps <- lapply(split_df, function(x) Corpus(VectorSource(x)))
summary(all_corps)
Length Class Mode
df1 2 SimpleCorpus list
df2 2 SimpleCorpus list