【问题标题】:In R: How do I create a dataframe name from a string plus a column name plus categorical variable?在 R 中:如何从字符串加上列名加上分类变量创建数据框名称?
【发布时间】:2019-07-12 19:02:52
【问题描述】:

抱歉,这似乎是一个简单的问题,但我找不到答案。

我正在使用关键词组来搜索重要短语的字符串。我的表 (srchtbl) 按类别(它们所指的一般事物)和组件(操作与描述)对单词进行分类

我的方法要求我深入到向量以提取词组进行搜索。我能够为每个类别名称和每个组件创建向量。

但是,我还想为每个类别命名的数据框。

我的数据:

  word    pattern category component  
  <chr>   <chr>   <chr>    <chr>      
1 pack    pack    pkg      action     
2 protect protect pkg      action     
3 well    well    pkg      description
4 clever  clever  pkg      description
5 care    care    pkg      description
6 safe    safe    pkg      description

这些语句使用适当的名称创建适当的数据框:

catgroups <- unique(srchtbl$category)

assign(paste("df_",  catgroups[i], sep = ""), srchtbl %>%  filter(category == catgroups[i]) %>% group_by(component))

这很好,但我如何在不使用整个语句的情况下引用它?如果我使用:

print(paste("df_",  catgroups[3], sep = ""))

[1] "df_pkg"

所以如果不使用整个 assign 语句,我就无法再次引用它。

是否有另一种方法可以连接数据框名称并进行简单分配,例如:

"string" + catgroups[i] <- srchtbl %>%  filter(category == catgroups[3]) %>% group_by(component))

最终代码将被循环,以便关键字表可以扩展到任意数量的类别和组件,因此我不想键入单个数据框名称

【问题讨论】:

  • 是否有理由不将这些数据帧存储在命名列表中而不是全局环境中?
  • 感谢您抽出宝贵时间查看我的评论。主要原因是我不知道怎么做,但如果这是最好的路线,我会查一下。
  • 你可以用my_list&lt;- list()创建一个空列表,然后添加像my_list[["df_pkg"]] &lt;- srchtbl %&gt;% ...这样的数据框。然后你可以参考my_list$df_pkg。这应该接受[[ 中的表达式(即paste)。您当前的方式可能可行,但可能会很混乱。

标签: r dataframe variables naming categorical-data


【解决方案1】:

考虑基本 R 的 bysplit,它从一个或多个分组创建数据帧的命名列表,您可以使用 $[[ 限定符引用单个数据帧。无需使用许多类似结构的对象来淹没全球环境。而是维护一个list 对象。如果存储在 list 中,则不会丢失数据框的功能。

df_list1 <- split(srchtbl, srchtbl$category)
df_list1$pkg

#      word pattern category   component
# 1    pack    pack      pkg      action
# 2 protect protect      pkg      action
# 3    well    well      pkg description
# 4  clever  clever      pkg description
# 5    care    care      pkg description
# 6    safe    safe      pkg description


dflist2 <- by(srchtbl, srchtbl$category, identity)
dflist2[['pkg']]

#      word pattern category   component
# 1    pack    pack      pkg      action
# 2 protect protect      pkg      action
# 3    well    well      pkg description
# 4  clever  clever      pkg description
# 5    care    care      pkg description
# 6    safe    safe      pkg description

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-09-29
    • 2018-10-21
    • 2014-12-13
    • 1970-01-01
    • 2013-04-12
    相关资源
    最近更新 更多