R:tidyr::spread 的编程替代方案?

标签 r dataframe tidyr

我有 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/

相关文章:

r - 使用对预先存在的向量的引用创建 data.table

python - Panda 通过分组连接多个时间序列并扩展缺失数据

scala - SPARK 数据帧错误 : cannot be cast to scala. Function2,同时使用 UDF 拆分列中的字符串

r - 将一列拆分为多个 R 并在为真时给出逻辑值

r - 将变量名称向量传递给 dplyr 中的排列()

r - 用 hexSticker 修剪六边形形状?

string - 有没有更快的方法将字符串拆分为给定长度的子字符串?

python - pandas - 将一行分成 2 或 3 行(取初始行值的 %)

r - 使用多个分隔符将一列拆分为两列时,将多余的内容合并到左侧

r - 将列名传递给 R dplyr group_by 和汇总函数