如何将数据框的元素映射到 R 中的另一个数据框?

时间:2021-04-05 20:50:32

标签: r

我有以下两个数据框。 数据框 1:

<头>
篮子 苹果 香蕉 柑橘
1 C01 A03 二氧化碳
2 A01 B02 C03
3 B01 A02 B03

数据框 2 的行名称标记为 A-C,列名称标记为 1-3。

我如何能够从数据帧 1 中读取元素,并将它们映射到数据帧 2 中各自的单元格中。例如,如果 df1 中的元素读取为 C01,它将使用以下字符串打印到数据框 2 行 C 列 1 中:'Apple1'(篮子 1 中的苹果)。

最终目标示例:

<头>
0 1 2 3
A 苹果2 香蕉3 香蕉1
B 苹果3 香蕉2 柑橘3
C 苹果1 柑橘1 柑橘2

2 个答案:

答案 0 :(得分:4)

我们使用“篮子”以外的列将数据重新整形为“长”格式,separate 通过在非数字部分和数字部分之间的连接处将“值”列一分为二,{{1 }} 'name' 列与 'Basket' 并用 unite

重塑为 'wide'
pivot_wider

-输出

library(dplyr)
library(tidyr)
df1 %>% 
    pivot_longer(cols = -Basket) %>%
    separate(value, into = c('col1', 'col2'), 
            sep="(?<=\\D)(?=\\d)", convert = TRUE) %>% 
    unite(name, name, Basket, sep="") %>% 
    arrange(col2, col1) %>%
    pivot_wider(names_from = col2, values_from = name)

数据

# A tibble: 3 x 4
#  col1  `1`    `2`     `3`    
#  <chr> <chr>  <chr>   <chr>  
#1 A     Apple2 Banana3 Banana1
#2 B     Apple3 Banana2 Citrus3
#3 C     Apple1 Citrus1 Citrus2     

答案 1 :(得分:2)

使用 data.table + dcastmelt 选项

dcast(
  melt(setDT(df1),
    id.var = "Basket"
  )[
    ,
    variable := paste0(variable, Basket)
  ],
  gsub("\\d", "", value) ~ gsub("\\D", "", value),
  value.var = "variable"
)

给予

   value     01      02      03
1:     A Apple2 Banana3 Banana1
2:     B Apple3 Banana2 Citrus3
3:     C Apple1 Citrus1 Citrus2