r语言 - 基于另一个df替换选定行的多个列值



我正在寻找一种迭代的方式(例如for loop,purrr)来替换一些颜色的值为数据框的选定行与类似的颜色值从另一个数据框

# Here is a toy df
df <- dplyr::tibble( 
"id" = c("id_a", "id_b", "id_c"), 
"subj_1" = c("subj_1_a", "subj_1_b",  "subj_1_c"), 
"subj_2" = c("subj_2_a", "subj_2_b","subj_2_c"), 
"subj_3" =  c("subj_3_a", "subj_3_b","subj_3_c") 
)
#   id    subj_1   subj_2   subj_3  
#   <chr> <chr>    <chr>    <chr>   
# 1 id_a  subj_1_a subj_2_a subj_3_a
# 2 id_b  subj_1_b subj_2_b subj_3_b
# 3 id_c  subj_1_c subj_2_c subj_3_c

下面是一个我想在列中替换的值的datafame:

df_replace <- dplyr::tibble(
"id" = "id_a",  
"subj_1" = "subj_1_a_REP",
"subj_2" = "subj_2__REP",
"subj_3" = "subj_2__REP"
)

这是我寻找的结果(一个接一个地获得):

df2 <- df
df2$subj_1[df2$id == "id_a"] <- df_replace$subj_1
df2$subj_2[df2$id == "id_a"] <- df_replace$subj_2
df2$subj_3[df2$id == "id_a"] <- df_replace$subj_3
#   id    subj_1       subj_2      subj_3     
#   <chr> <chr>        <chr>       <chr>      
# 1 id_a  subj_1_a_REP subj_2__REP subj_2__REP
# 2 id_b  subj_1_b     subj_2_b    subj_3_b   
# 3 id_c  subj_1_c     subj_2_c    subj_3_c 

如何获得与looppurrr相同的迭代?

我的尝试不工作-我相信这是一些索引问题

col_subj_names <- names(df_replace)[-1] # without id
# pick the id 
i <- "id_a"
# for loop (NOT WORKING!)
for (j in seq_along(col_subj_names)) {
col <-  col_subj_names[j]
df %>%
dplyr::filter(id == i) %>%
dplyr::mutate(., col = df_replace$col)
df3 <- df
}

我无法理解警告信息:

Unknown or uninitialized column:col.

<代码>

这里根本不需要循环。您可以一次替换整行。

library(tidyverse)
df_replace <- tibble(
"id" = "id_a",  
"subj_1" = "subj_1_a_REP",
"subj_2" = "subj_2__REP",
"subj_3" = "subj_2__REP"
)
tibble( 
"id" = c("id_a", "id_b", "id_c"), 
"subj_1" = c("subj_1_a", "subj_1_b",  "subj_1_c"), 
"subj_2" = c("subj_2_a", "subj_2_b","subj_2_c"), 
"subj_3" =  c("subj_3_a", "subj_3_b","subj_3_c") 
) |> 
rows_update(df_replace)
#> Matching, by = "id"
#> # A tibble: 3 × 4
#>   id    subj_1       subj_2      subj_3     
#>   <chr> <chr>        <chr>       <chr>      
#> 1 id_a  subj_1_a_REP subj_2__REP subj_2__REP
#> 2 id_b  subj_1_b     subj_2_b    subj_3_b   
#> 3 id_c  subj_1_c     subj_2_c    subj_3_c

请注意,即使您有多个rows_update(df_replace)行,这仍然可以工作-它们都将被一行代码适当地替换。

试试CC_9:

PP_7在2022-05-17由reprex包(v2.0.1)创建

最新更新