通过将数据框中的列名称与行值匹配来填充列

Populate columns by matching name of column in data-frame with row values

df1

1 2 3 4 5 ...53 
0 0 0 0 0     
...

以上 df 中的列位于 8:60(列位置)

范围内

df2

Group.1   x 
   1      10
   2      15
   3      20
   4      5
   5      0
...53

df1 中有 53 列来自范围 8:60,df2 中有 53 行

想法是将 df1 中的列名称 1-53 与 df2 中的 'Group.1' 列匹配,如果匹配,则使用 [=40 中的相应值填充 df1 中的列行=] df2 中的列

输出 df1

    1  2  3  4 5 ...53 
    10 15 20 5 0   

我该怎么做?

谢谢,

这将是 tidyverse-packages 的解决方案:

library(tibble)
library(dplyr)
#> 
#> Attaching package: 'dplyr'
#> The following objects are masked from 'package:stats':
#> 
#>     filter, lag
#> The following objects are masked from 'package:base':
#> 
#>     intersect, setdiff, setequal, union
library(tidyr)


df1 <- tibble::tribble(
  ~"1", ~"2", ~"3", ~"4", ~"5",
  0, 0, 0, 0, 0
)


df2 <- tibble::tribble(
  ~"Group.1", ~"x",
  1, 10,
  2, 15,
  3, 20,
  4, 5,
  5, 0
)


df1_long <- df1 %>% tidyr::pivot_longer(
  cols = dplyr::everything(),
  names_to = "name",
  values_to = "value"
)


df2_char <- df2 %>% dplyr::mutate(name = as.character(Group.1))

df <- df1_long %>% dplyr::left_join(df2_char, by = c("name"))

df_wide <- df %>%
  dplyr::select(name, x) %>%
  tidyr::pivot_wider(names_from = name, values_from = x)

reprex package (v1.0.0)

创建于 2021-02-02