【发布时间】:2020-10-07 16:30:41
【问题描述】:
以这样的示例数据框为例(真实的数据框有更多列):
df <- data.frame(A = seq(1, 3, 1),
B = seq(4, 6, 1))
我可以使用pivot_longer 来收集我感兴趣的列(A 和B),如下所示:
library(dplyr)
library(tidyr)
df <- df %>%
pivot_longer(cols = c("A", "B"), names_to = "Letter", values_to = "Number")
df
Letter Number
<chr> <dbl>
1 A 1
2 B 4
3 A 2
4 B 5
5 A 3
6 B 6
现在假设我的数据框中有另一列 C,使其不再整洁
C <- seq(7, 12, 1)
df_2 <- data.frame(df, C)
df_2
Letter Number C
1 A 1 7
2 B 4 8
3 A 2 9
4 B 5 10
5 A 3 11
6 B 6 12
我想再次使用pivot_longer 使df_2 整洁并得到这个输出:
data.frame(Letter = c(rep("A", 3), rep("B", 3), rep("C", 3)),
Number = seq(1, 12, 1))
Letter Number
1 A 1
2 A 2
3 A 3
4 B 4
5 B 5
6 B 6
7 C 7
8 C 8
9 C 9
10 C 10
11 C 11
12 C 12
虽然使用相同的策略会产生错误:
df_2 %>%
pivot_longer(cols = "C", names_to = "Letter", values_to = "Number")
Error: Failed to create output due to bad names. * Choose another strategy with `names_repair`
将names_repair 设置为minimal 会运行,但不会产生我想要的输出。
【问题讨论】:
-
为什么不单独
pivot_longerC 然后联合两者 -
@AnilGoyal 如果你把它写下来作为答案,我会给你一个互联网点
-
请看解决办法