假设我有一个数据框df
,其中有几十个标识变量(列),只有几个测量变量(也是列)。
为了避免重复输入每个参数的所有变量,我将标识列和测量列的名称分别分配给df_id
和df_measured
。很容易输入这些向量来缩短melt
的参数输入…
df.m <- melt(df, id.vars = df_id, measure.vars = df_measured)
...但我不知道如何使用相同的方法在dcast
中输入formula =
参数来指定id变量,因为它要求输入指向列的数字位置。
如果我的输入列的顺序发生了变化,我是否必须创建一个类似于df_id
的数字位置向量,并冒着破坏程序功能的风险,或者我可以通过名称引用它们,并以某种方式在formula =
参数中仍然可以工作?谢谢
3条答案
按热度按时间wz3gfoph1#
您可以使用
as.formula
来构造公式。下面是一个例子:
blmhpbnm2#
从Tidyverse包glue导出的函数 glue() 使公式比 paste() 更容易构建。下面是 glue() 的作用:
返回字符串
因此,glue() 逐字地接受参数,但将名称和其他表达式替换在大括号中。查看上面的链接以获取完整的规范:glue() 有其他参数,包括更多的字符串,一个参数提供了查找变量的环境,还有两个参数将花括号更改为其他分隔符。就 dcast() 而言,它避免了必须与 paste() 一起使用的额外引号和逗号。下面是一个例子,使用你的表:
下面是它的输出(在R 3.6.3上):
wlwcrazw3#
对于使用base R的人来说,
sprintf()
与glue::glue()
相比是很好的:作为奖励,如果您可以使用
sprintf()
而不是使用paste()
,您将获得性能改进,因为它是在C中实现的。