将列表中的多个数据框转换为其自己的唯一语料库对象

时间:2019-10-31 12:40:24

标签: r list dataframe tm corpus

我已经使用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)?

非常感谢。

1 个答案:

答案 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