我有 R data.frames 有不同数量的列。最后一列是数字,其余是字符串。我需要对它们进行排列,以便展开最后一个非数字列。困难在于我想以编程方式执行此操作,因为我不知道列名。
例如
df <- data.frame(varA = c("A1", "A1", "A2", "A2"),
varB = c("B1", "B2", "B1", "B2"),
val = c(1, 2, 3, 4))
我到达我想去的地方
tidyr::spread(df, varB, val)
但是当传播变量的名称未知时,我不知道如何实现这一点。
例如这行不通:
tidyr::spread(df, names(df)[ncol(df) - 1], val)
我已经尝试过 tidyverse
解决方案,但基础 R 对我来说同样适用。
最佳答案
spread_
从 tidyr 0.7.0 开始被弃用,tidyr 中的编程已切换到 tidy 评估。参见 this article了解更多背景。
要在 spread
中使用字符串,您需要 rlang 包中的 sym
函数以及 !!
取消引用以进行评估。
spread(df, !!rlang::sym(names(df)[ncol(df) - 1]), val)
varA B1 B2
1 A1 1 2
2 A2 3 4
关于R:tidyr::spread 的编程替代方案?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45814643/