如何根据行号上的条件更新数据框

问题描述 投票:0回答:1

让我们获取 mpg 文件并添加一个 ID 作为行号

DATA1 <- mpg
DATA2 <- dplyr::mutate(DATA1, ID = row_number())

我只想根据某些列的 ID 更新 DATA2

IF ID==1 then manufacturer="Honda", cyl=6, year=2005,
IF ID==2 then manufacturer="Toyota", class="sedan"

等等

我已经尝试过以下方法,但它很冗长,并且如果补丁跨越多行,则不适合大型数据库

DATA3 <- DATA2 %>%
  mutate(manufacturer = ifelse(ID == 1, "Honda", manufacturer))  %>% 
  mutate(cyl = ifelse(ID == 1, 6, cyl)) %>%
  mutate(year = ifelse(ID == 1, 2005, year))
DATA3 <- DATA2 %>%
  mutate(manufacturer = ifelse(ID == 2, "Toyota", manufacturer))  %>%
  mutate(class = ifelse(ID == 2, "sedan", class)) 
r
1个回答
0
投票

也许

case_when
可以帮助你

mpg %>% 
  mutate(
    id = row_number(),
    manufacturer = case_when(
      id == 1 ~ "Honda",
      id == 2 ~ "Toyota",
      TRUE ~ manufacturer
    ),
    cyl = case_when(
      id == 1 ~ 6,
      TRUE ~ cyl
    ),
    year = case_when(
      id == 1 ~ 2005,
      TRUE ~ year
    ),
    class = case_when(
      id == 2 ~ "Sedan",
      TRUE ~ class
    )
  )
© www.soinside.com 2019 - 2024. All rights reserved.