在数据帧列上使用sapply从另一个数据帧中选择返回值

时间:2017-09-27 09:56:36

标签: r dataframe

我有一个与使用LDA的主题相关联的数据框terms

Topic 1   Topic 2   Topic 3
foo1      bar1      cow1
foo2      bar2      cow2
foo3      bar3      cow3

在另一个数据框items中,我有一个与主题相关联的项目列表:

ItemID    Topic
item1       1
item2       1
item3       2
item4       3

我想创建一个新列items$terms,它返回与该主题相关的术语:

ItemID    Topic   terms
item1       1     foo1 foo2 foo3
item2       1     foo1 foo2 foo3
item3       2     bar1 bar2 bar3
item4       3     cow1 cow2 cow3

我试过了:

items$terms <- sapply(items$Topic,paste(terms[,x],collapse = " "))

# For each item, find the topic, and return the pasted terms from topicterms

但我收到错误:

  

[.data.frame(topicterms,x)中的错误:找不到对象'x'。

你能告诉我我做错了吗?

1 个答案:

答案 0 :(得分:1)

你只是忘了sapply采用函数而不是表达式作为参数:

items$terms <- sapply(items$Topic,function(x) paste(topicterms[,x],collapse = " "))

但是,此公式要求topicterms中的列名称与items中的主题值完全匹配,而现在它们不是 - 一个是数字,一个是字符串{{1附加数字。更改列名可能最简单:

"Topic "