【问题标题】:Looping through list and concatenating strings in R (Syntax)在 R 中循环遍历列表并连接字符串(语法)
【发布时间】:2018-11-13 22:09:13
【问题描述】:

我正在尝试创建一个从 1 到 14 的循环。此循环中的每个整数都将添加到新创建的数据框名称的末尾。然后,它应该根据数字和文本的连接来搜索现有数据框中的列。我一直在寻找几个小时,但找不到解决方案。

我的意思是:

while (i <= 14) {
    "newDF" + i <- oldDf %>%
         filter(str_detect(ColumnName, "TEXT" + i)

}

新的数据框应该如下所示:

新DF1,新DF2...新DF14

它们应该基于连接的字符串(text + i)创建:

text1,text2..text14

我的第一个挑战是基于文本和 i 的连接创建一个新的数据框。我尝试使用 str_c 命令和 str_glue 命令,但收到以下错误消息。

Error in str_c("newDF", i)) <- oldDF: 
  target of assignment expands to non-language object


Error in str_glue("newDF{i}") <- oldDF: 
  target of assignment expands to non-language object

【问题讨论】:

  • 当您需要循环时,当您不知道循环将运行多少次时使用while 循环 - 您需要进行测试以确定何时停止。如果您事先知道要循环多少次,请使用for 循环。在这种情况下,您知道循环从 1 变为 14,因此请使用 for (i in 1:14)
  • 但也不要这样做。顺序命名的变量很难使用(正如您所发现的那样)。相反,将它们全部放在一个列表中。 Read my answer here about using lists of data frames。这要容易得多。
  • @Gregor 谢谢 - 很好的回答

标签: r string dataframe full-text-search concatenation


【解决方案1】:

您上面的代码的主要问题是您不能在赋值运算符的左侧进行任何操作。

for (i in 1:14){
    assign(str_glue("newDF{i}"), oldDF %>%
         filter(str_detect(ColumnName, str_glue("TEXT{i}"))))
}

所以从技术上讲,即使我觉得有更好的方法来做到这一点,无论是使用嵌套列表还是使用传播和聚集,这都是可行的。我会说更多,但我没有足够的上下文来解决问题。

【讨论】:

    猜你喜欢
    • 2014-09-19
    • 2023-01-24
    • 1970-01-01
    • 1970-01-01
    • 2015-12-02
    • 1970-01-01
    • 2021-04-02
    • 2012-01-19
    相关资源
    最近更新 更多