我有R data.frames具有不同的列数。最后一列是数字,其余是字符串。我需要安排它们,以便传播最后一个非数字列。困难在于我想以编程方式执行此操作,因为我不知道列名称。
E.g。
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)
但是当我不知道扩散变量的名称时,我不知道如何实现这一点。
E.g。这不起作用:
tidyr::spread(df, names(df)[ncol(df) - 1], val)
我已经尝试了tidyverse
解决方案,但基地R对我来说同样合适。
答案 0 :(得分:3)
我们可以使用spread_
tidyr::spread_(df, names(df)[ncol(df) - 1], "val")
# varA B1 B2
#1 A1 1 2
#2 A2 3 4
答案 1 :(得分:3)
spread_
已弃用, tidyr 中的编程已切换为整洁评估。有关更多背景信息,请参阅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