Tidyr函数在循环内收集并粘贴

时间:2018-11-09 16:02:46

标签: r tidyr

我正在尝试对多个数据帧进行循环。我正在使用gather中的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="_")来更改变量名,但是这个问题引起了我的注意,以提高对代码的理解。

有些单词是葡萄牙语,但与问题无关。我还更改了循环范围,以避免出现时间问题。

0 个答案:

没有答案