【问题标题】:Renaming dataframe with parse text R使用解析文本 R 重命名数据框
【发布时间】:2021-05-18 15:03:28
【问题描述】:

为什么这段代码更改实际上并没有改变 TEST 的列名?

TEST = data.frame(col1 = LETTERS, col2 = letters)
"TEST" %>% paste0(" %<>% dplyr::rename(capitalLetters = 'col1') ") %>% parse(text = .) %>% eval()

我想对大量数据帧进行一系列转换,其中我有一个数据帧环境变量名称的列表。但我不想手动输入每个数据帧的转换,所以我想使用解析文本-> eval。

编辑:摆脱分配管道

"TEST" %>% 
paste0(
    ., " <- ", ., 
    " %>% dplyr::rename(capitalLetters = col1) "
) %>% parse(text = .) %>% eval()

编辑:刚刚注意到这也不起作用

"A <- 3" %>% parse(text = .) %>% eval()
A
Error: object 'A' not found

我猜无法通过 parse->eval 分配/更新环境变量?

【问题讨论】:

  • 万一你打错了:%&lt;&gt;% 而不是%&gt;%
  • 不是错字,library(magrittr),这是一个管道,它将输入传递给右侧的函数,并将输入设置为右侧函数的值
  • 更新以消除分配管道
  • "TEST" %&gt;% paste0(" %&gt;% dplyr::rename(capitalLetters = 'col1') ") %&gt;% parse(text = .) %&gt;% eval() 不适合你?
  • 它工作,但它没有分配。重点是我不想输入数据框名称 TEST,我有一个大的数据框名称列表(数据框的环境变量名称列表),所有这些都需要一系列转换。所以我希望分配成为评估字符串的一部分。

标签: r


【解决方案1】:

不确定我是否完全理解了这个问题。希望对你有帮助

Dfs<-list(DF1=data.frame(col1 = LETTERS, col2 = letters),DF2=data.frame(col1 = LETTERS, col2 = letters))
DfsNew<-lapply(Dfs,function(x) x%>%rename(capitalLetters = 'col1'))

它将创建一个具有相同数据框名称的列表,并将所有这些名称中的 col1 更改为 capitalLetters

现在,如果您希望您的数据框位于全球环境中,请选中此项 Return elements of list as independent objects in global environment

在我们的例子中

list2env(DfsNew,globalenv())

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-09-05
    • 1970-01-01
    • 2022-01-19
    • 1970-01-01
    • 1970-01-01
    • 2020-04-13
    • 2021-04-18
    • 1970-01-01
    相关资源
    最近更新 更多