通过将数据框中的列名称与行值匹配来填充列
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
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