我想修改表中的列的值(具有 2 列和多行的資料框)為第二列的每一行應用條件,如果驗證,復制該單元格的值并將其粘貼到同一行的第一列。
因此,我撰寫了一個代碼,它使用為表的每一行 (i) 運行的 for 回圈來完成此操作。
該代碼運行良好,但我想學習如何用 tidyverse 做同樣的事情,特別是使用 map_dl 函式。我到處搜索,但我沒能正確理解如何使用 map_df 函式。
這是帶有 for 回圈的代碼:
library(tidyverse)
df <- tibble (Color = "A",
Names = c("Jane Yellow", "Max", "Jeff", "Andy", "Lux Yellow", "Elizabeth", "Susan", "David Yellow", "Thomas", "Lisa"))
col_color <- function(df) {
for(i in 1:nrow(df)){
if(grepl("Yellow", df[i,2], fixed=TRUE) == TRUE)
{df[i,1]<- str_extract(df[i,2], "^(?!.*\bYellow\b).*$")}}
for(i in 2:nrow(df)){
if(df[i,1] == "A")
{df[i,1] <- df[i-1,1]}}
return(df)
}
df <- col_color(df)
我嘗試使用下面的代碼使用 map_dl 來做到這一點,但它不起作用:
library(tidyverse)
df <- tibble (Color = "A",
Names = c("Jane Yellow", "Max", "Jeff", "Andy", "Lux Yellow", "Elizabeth", "Susan", "David Yellow", "Thomas", "Lisa"))
modify_first_column <- function(i) {
if(grepl("Yellow", df[i,2], fixed=TRUE) == TRUE)
{df[i,1]<- str_extract(df[i,2], "^(?!.*\bYellow\b).*$")}
if(df[i,1] == "A")
{df[i,1] <- df[i-1,1]}
return(df)
}
modify_first_column <- as.tibble(modify_first_column)
df <- map_df(i = 1:nrow(df), modify_first_column)
有人可以幫我弄清楚嗎?謝謝
uj5u.com熱心網友回復:
您的問題的可能解決方案,但沒有回圈或映射。但它在tidyverse.
library(tidyverse)
您的資料:
# A tibble: 10 x 2
color names
<chr> <chr>
1 A Jane Yellow
2 A Max
3 A Jeff
4 A Andy
5 A Lux Yellow
6 A Elizabeth
7 A Susan
8 A David Yellow
9 A Thomas
10 A Lisa
第一個條件:
df <- df %>%
mutate(color = case_when(str_detect(names, "Yellow") ~ names,
TRUE ~ color))
# A tibble: 10 x 2
color names
<chr> <chr>
1 Jane Yellow Jane Yellow
2 A Max
3 A Jeff
4 A Andy
5 Lux Yellow Lux Yellow
6 A Elizabeth
7 A Susan
8 David Yellow David Yellow
9 A Thomas
10 A Lisa
第二個條件:
df %>%
mutate(color = replace(color, color == "A", NA)) %>%
fill(color)
# A tibble: 10 x 2
color names
<chr> <chr>
1 Jane Yellow Jane Yellow
2 Jane Yellow Max
3 Jane Yellow Jeff
4 Jane Yellow Andy
5 Lux Yellow Lux Yellow
6 Lux Yellow Elizabeth
7 Lux Yellow Susan
8 David Yellow David Yellow
9 David Yellow Thomas
10 David Yellow Lisa
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/469273.html
下一篇:從字典陣列中檢索值
