這個問題在這里已經有了答案: 生成一個虛擬變數 (17 個答案) 昨天關門。
我有一個包含水果名稱的列(“名稱”)的資料框:
name
Apple
Apple
Mango
Banana
Banana
Orange
Mango
Orange
.... 等等。我的資料中有 9 種水果
我想按照命名規則“name_'data'”創建新變數。所以,我想再添加 9 個變數,例如:
name name_Apple name_Mango name_Banana name_Orange
Apple 1 0 0 0
Apple 1 0 0 0
Mango 0 1 0 0
Banana 0 0 1 0
Banana 0 0 1 0
Orange 0 0 0 1
Mango 0 1 0 0
Orange 0 0 0 1
我想使用 for 回圈來執行此操作,因為資料將被添加到現有框架中。我試過這個:
name_list <- c("Apple", "Mango", "Banana", "Orange)
for (i in name_list) {
df_main$name_[[i]] <- ifelse(df_main$name == [[i]], 1, 0)
}
我收到錯誤“錯誤:意外'[['”。我想我在回圈中參考了錯誤的字符資料,但無法弄清楚如何正確地做到這一點。mutate() 會在這里更好地作業嗎?
uj5u.com熱心網友回復:
我們可以dummy_cols使用fastDummies
library(fastDummies)
df1 %>%
dummy_cols('name')
-輸出
name name_Apple name_Banana name_Mango name_Orange
1 Apple 1 0 0 0
2 Apple 1 0 0 0
3 Mango 0 0 1 0
4 Banana 0 1 0 0
5 Banana 0 1 0 0
6 Orange 0 0 0 1
7 Mango 0 0 1 0
8 Orange 0 0 0 1
資料
df1 <- structure(list(name = c("Apple", "Apple", "Mango", "Banana",
"Banana", "Orange", "Mango", "Orange")), class = "data.frame", row.names = c(NA,
-8L))
uj5u.com熱心網友回復:
在基礎 R 中,您可以執行以下操作:
mat <- outer(df$name, unique(df$name), function(a, b) as.numeric(a == b))
cbind(df, setNames(as.data.frame(mat), paste0('name_', unique(df$name))))
#> name name_Apple name_Mango name_Banana name_Orange
#> 1 Apple 1 0 0 0
#> 2 Apple 1 0 0 0
#> 3 Mango 0 1 0 0
#> 4 Banana 0 0 1 0
#> 5 Banana 0 0 1 0
#> 6 Orange 0 0 0 1
#> 7 Mango 0 1 0 0
#> 8 Orange 0 0 0 1
uj5u.com熱心網友回復:
另一種方式:
model.matrix(~ name - 1, data = df)
# nameApple nameBanana nameMango nameOrange
# 1 1 0 0 0
# 2 1 0 0 0
# 3 0 0 1 0
# 4 0 1 0 0
# 5 0 1 0 0
# 6 0 0 0 1
# 7 0 0 1 0
# 8 0 0 0 1
資料:
structure(list(name = c("Apple", "Apple", "Mango", "Banana",
"Banana", "Orange", "Mango", "Orange")), class = "data.frame", row.names = c(NA,
-8L)) -> df
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/445057.html
上一篇:在for回圈中更改函式的輸入變數
