因此,基本上,從這樣的表中,一列包含六種不同的字符型別`。:
Subject Name
<chr>
1 a
2 b
3 c
4 d
5 e
6 f
7 b
etc. etc.
*7 out of 1000 rows*
我想使用 mutate/simiair 函式創建一個新列,以基于“Name”中的這六個組創建一個新字符列,以便新表如下所示:
Subject Name New column
<chr> <chr>
1 a Hi
2 b Hello
3 c Sup
4 d Yo
5 e Hullo
6 f Yosha
7 b Hello
etc. etc. etc.
*7 out of 1000 rows*
我曾嘗試使用這樣的 if 函式:
mutate("New column" = if(Name %in% "a") {
"Hi"
}
else if(Name %in% "b"){
"Hello"
}
else if(Name %in% "c") {
"Sup"
}
else if(Name %in% "d") {
"Yo"
}
else if(Name %in% "e") {
"Hullo"
}
else if(name %in% "f") {
"Yosha"
})
但我無法讓它發揮作用。一些幫助將不勝感激。
uj5u.com熱心網友回復:
如果您只有少量替換,我認為最簡單的方法是:
lookup <- c(a = "Hi", b = "Hello", c = "Sup", d = "Yo", e = "Hullo", f = "Yosha")
df %>% mutate(New_Column = lookup[Name])
#> Subject Name New_Column
#> 1 1 a Hi
#> 2 2 b Hello
#> 3 3 c Sup
#> 4 4 d Yo
#> 5 5 e Hullo
#> 6 6 f Yosha
#> 7 7 b Hello
資料(取自問題)
df <- structure(list(Subject = 1:7, Name = c("a", "b", "c", "d", "e",
"f", "b")), class = "data.frame", row.names = c(NA, -7L))
df
#> Subject Name
#> 1 1 a
#> 2 2 b
#> 3 3 c
#> 4 4 d
#> 5 5 e
#> 6 6 f
#> 7 7 b
uj5u.com熱心網友回復:
您可以嘗試case_when()從dplyr. 開頭的最后一行TRUE是為new_colif nameis not af分配一個缺失值。
library(tidyverse)
dat <- data.frame(
subject = 1:6,
name = letters[1:6]
)
dat |>
mutate(new_col = case_when(
name == "a" ~ "Hi",
name == "b" ~ "Hello",
name == "c" ~ "Sup",
name == "d" ~ "Yo",
name == "e" ~ "Hullo",
name == "f" ~ "Yosha",
TRUE ~ NA_character_
))
# subject name new_col
# 1 a Hi
# 2 b Hello
# 3 c Sup
# 4 d Yo
# 5 e Hullo
# 6 f Yosha
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/340011.html
標籤:r
上一篇:使用包dplyr的summise
下一篇:R日期比較使用回圈
