假设有如下数据框:
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
                
            
                    上一篇:按列的总和对数据框进行子集化