我有一個看起來像這樣的df:
| 姓名 | 1號 | 2號 | 3 號 |
|---|---|---|---|
| 杰克 | 10 | 20 | 30 |
| 伊萊 | 10 | 20 | 30 |
| 前 | 10 | 20 | 30 |
| 杰克 | 10 | 20 | 30 |
我想將列 2:4 中的所有值乘以 10 倍(因此除 Name 列之外的所有列),我只想選擇Name == Jack.
所以,我的最終資料表應該是這樣的:
| 姓名 | 1號 | 2號 | 3 號 |
|---|---|---|---|
| 杰克 | 100 | 200 | 300 |
| 伊萊 | 10 | 20 | 30 |
| 前 | 10 | 20 | 30 |
| 杰克 | 100 | 200 | 300 |
我嘗試了以下各種迭代:
df %>%
filter(Name == "Jack") %>%
select(No1:No3) %>%
df*10
包含
df %>%
filter(Name == "Jack") %>%
df[2:4]*10
我也嘗試過 if 陳述句:
new_df <- if(df$name == "Jack"){
df[2:4]*10}
uj5u.com熱心網友回復:
我們可以使用across回圈以“否”開頭的列,然后根據“名稱”列創建邏輯條件,使用或者ifelse/if_else根據case_when邏輯進行更改
library(dplyr)
df <- df %>%
mutate(across(c(No1, No2, No3),
~ case_when(Name == "Jack" ~ .x * 10, TRUE ~ as.numeric(.x))))
它也可以作為索引傳遞
df %>%
mutate(across(c(2, 3, 4), # or if it is a range 2:4
~ case_when(Name == "Jack" ~ .x * 10, TRUE ~ as.numeric(.x))))
或者在 中base R,對列和行進行子集化(基于邏輯),并在乘以 10 后重新分配
df[df$Name == "Jack", -1] <- df[df$Name == "Jack", -1] * 10
資料
df <- structure(list(Name = c("Jack", "Eli", "Mae", "Jack"), No1 = c(10L,
10L, 10L, 10L), No2 = c(20L, 20L, 20L, 20L), No3 = c(30L, 30L,
30L, 30L)), class = "data.frame", row.names = c(NA, -4L))
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/454441.html
