r - Tidyr 函数在循环内收集和粘贴
问题描述
我正在尝试使用多个数据帧运行一个循环。我正在使用gather
函数 from并且我想将循环的索引 .以及单词.tidyr
用作参数。i
deaths
我一直在尝试:
gather(data[[i]], "year", paste("deaths", i, sep="_"), 2:ncol(data[[i]]))
但是,每次我尝试时,它都会返回"Error: Must supply a symbol or a string as argument".
我在某处读到tidyr
以非标准方式评估事物,而替代方案是gather_
,它使用标准评估。
然而,命令
gather_(data[[i]], "year", paste("deaths", i, sep="_"), 2:ncol(data[[i]]))
退货Error: Only strings can be converted to symbols
。
但是,我坚持粘贴命令已经产生了一个字符串。
有人知道修复吗?
这是完整的错误:
"<error>
message: Only strings can be converted to symbols
class: `rlang_error`
backtrace:
-tidyr::gather_(...)
-tidyr:::gather_.data.frame(...)
-rlang::syms(gather_cols)
-rlang:::map(x, sym)
-base::lapply(.x, .f, ...)
-rlang:::FUN(X[[i]], ...)
Call `summary(rlang::last_error())` to see the full backtrace"
完整代码:
require(datasus)
require(tidyr)
data_list <- list()
for(i in 1:2){
data_list[[i]] <- sim_inf10_mun(linha = "Município", coluna = "Ano do Óbito", periodo = c(1996:2016), municipio = "all",
capitulo_cid10 = i)
data_list[[i]] <- data.frame(data_list[i])
data_list[[i]] <- data_list[[i]][-1,]
data_list[[i]] <- data_list[[i]][,-ncol(data_list[[i]])]
data_list[[i]] <- gather(data_list[[i]], "ano", "deaths_01_i", 2:ncol(data_list[[i]]))
names(data_list[[i]])[1]<-"cod_mun"
data_list[[i]] <- transform(data_list[[i]], cod_mun = substr(cod_mun, 1, 6))
data_list[[i]] <- transform(data_list[[i]], ano = substr(ano, 2, 5))
}
这将完全按照我想要的方式返回一个面板数据集,其中包含行中的(市政代码年)标识和一个值。我的问题是值(列)名称是“deaths_01_i”,这有点明显,因为它是引号,而我希望它与循环一起运行。因此,我尝试用粘贴来实现它。
我知道我可以通过添加一行来更改变量名names(data_list[[i]])[3]<-paste("deaths_01",i,sep="_")
,但是这个问题引起了我的注意,以提高我对代码的理解。
有些词是葡萄牙语,但它们与问题无关。我还更改了循环的范围以避免时间问题。
解决方案
推荐阅读
- java - 空间计数器在 Java 中不起作用
- java - 为什么这是我尝试生成在 4 处停止的无尽线程?
- reactjs - Redux thunk 不会随着来自异步函数的响应而更新
- paypal - 在 Paypal 结帐 REST API 中隐藏送货地址
- c - 如何正确修改C中的二维数组?
- udp - 环回上的 UDP 数据包无序传送的可能性有多大?
- angular - 如何创建具有任意列和数据的数据表?
- python - 具有多列的时间序列,每列都有重复的条目。如何在熊猫中处理
- angular - Angular 7 with .net core 2.1 - 为特定页面启动
- javascript - CoffeeScript + Vue.js,Vue 实例未安装在 html 元素上