我创建了一个玩具数据帧来演示我的问题:
a = 0
df = data.frame(x = 1:2, y = 2:3, z = 3:4)
df %>% gather(key = "name0", value = "val", -1) # this works fine
df %>% gather(key = paste0("name", a), value = "val", -1) # but this gives an error
错误消息为
Error in `ensym2()`:
! Must supply a symbol or a string as argument
我希望具体说明";键";列的名称为name0
,但0
可以由paste0()
灵活更改。我已经搜索过了,但找不到解决方案!
正如Onyambu所说,gather
与此不兼容。pivot_longer
是现代替代品:
gather((上的开发已经完成,对于新代码,我们建议切换到pivot_langer((,它更易于使用,更具特色,并且仍在积极开发中。df%>%聚集("键"、"值"、x、y、z(相当于df%>%pivot_langer(c(x,y,z(,names_to=";键";,values_ to=";值"([来源]
您的代码等效于df %>% pivot_longer(-x, names_to = "name", values_to = "val")