修改dplyr中的单个单元格值

Par*_*gue 11 r dplyr

假设我有以下数据集:

dat <- read.table(text="id_1 id_2 
                  123 NA
                  456 NA
                  NA 3
                  NA 1
                  NA 1", header=T)
Run Code Online (Sandbox Code Playgroud)

我想更改id_1第一行的值。我想做这样的事情:

dat %>% slice(1) %>% mutate(id_1 == "new_id") %>% unslice()
Run Code Online (Sandbox Code Playgroud)

然而,似乎没有命令unslice,所以我留下了一个只有一行(修改后的)的数据框。就地修改后是否有一种干净的方法可以恢复原始数据集?

Mor*_*arz 20

如果我正确理解您的问题并且您只想更改列中的值id_1(而不是更改列名称),则可以使用该row_number命令访问该行。

dat %>% 
    mutate(id_1 = ifelse(row_number() == 1, "new_id",id_1))
Run Code Online (Sandbox Code Playgroud)

如果您还想对更多行执行此操作,请考虑:

dat %>% 
    mutate(id_1 = case_when(row_number() == 1 ~"new_id1", 
                            row_number() == 2 ~"new_id2",
                            TRUE ~ id_1))
Run Code Online (Sandbox Code Playgroud)

ETC。

请注意,这当然会将列类型更改为字符类型。如果您不想按行号访问该行,也可以通过要更改的确切值来执行此操作。

dat %>% 
      mutate(id_1 = ifelse(id_1 == 456, "new_id",id_1))
Run Code Online (Sandbox Code Playgroud)