假设有如下数据框:
library(tidyr)
df <- data.frame(A = c("A1", "A2"),
B = c("B1", "B2"),
C = c("C1", "C2"))
df
#> A B C
#> 1 A1 B1 C1
#> 2 A2 B2 C2
我们想要按照 A
和 B
列的组合值来重塑数据框,以创建新的列。可以使用 tidyr::unite()
函数将这些列合并到一起,并在列名之间添加字符串,然后将结果重塑回原始格式。
df %>% tidyr::unite("AB", A, B) %>%
tidyr::spread(AB, C)
#> AB1 AB2
#> 1 B1C1 B2C2
#> 2 B2C1 B2C2
这将创建一个新数据框,其中每个值都是原始数据框中 C
列中的一个值,该值取决于原始数据框中 A
和 B
列的组合。
注意,如果 A
或 B
列中有重复值,则需要先添加一个计数器列,以确保每个组合中都有唯一的值。
df <- data.frame(A = c("A1", "A1", "A2"),
B = c("B1", "B2", "B1"),
C = c("C1", "C2", "C3"))
df
#> A B C
#> 1 A1 B1 C1
#> 2 A1 B2 C2
#> 3 A2 B1 C3
df %>% mutate(n = row_number()) %>%
tidyr::unite("AB", A, B) %>%
tidyr::spread(AB, C)
#> n AB1 AB2
#> 1
上一篇:按列的总和对数据框进行子集化