r - 将 pivot_longer 与现有的 names_to 列一起使用
问题描述
以这样的示例数据框为例(真实的数据框有更多列):
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
运行但不会产生我想要的输出。
解决方案
像这样跟随
library(tidyverse)
df <- data.frame(A = seq(1, 3, 1),
B = seq(4, 6, 1))
df <- df %>%
pivot_longer(cols = c("A", "B"), names_to = "Letter", values_to = "Number")
C <- seq(7, 12, 1)
df_2 <- data.frame(C)
df_2 <- df_2 %>% pivot_longer(cols = C, names_to = "Letter", values_to = "Number")
df_result <- rbind(df, df_2)
输出
> df_result
# A tibble: 12 x 2
Letter Number
<chr> <dbl>
1 A 1
2 B 4
3 A 2
4 B 5
5 A 3
6 B 6
7 C 7
8 C 8
9 C 9
10 C 10
11 C 11
12 C 12
推荐阅读
- dart - 运行窗口消息“相同的行”
- c# - 如何使用 Xamarin Form 以编程方式在现有网格上添加按钮或标签?
- android - 带有自定义数据源的分页库在房间更新时不更新行
- matlab - 生成具有特定值的随机矩阵
- c - 只为数组的一个元素分配内存
- python - 正则表达式替换预期的字符串或类似字节的对象
- html - 如何通过单击类字体真棒链接来提交带有 JavaScript 的表单?
- mysql - MySQL查询根据财政年度动态获取数据
- c++ - EnableD2DSupport(); 在 MFC Direct2D Wrapper 类中失败
- android - 如何单独设置填充左/右列表视图项