我有 df
ID White Black Asian Hisp Other
1 1 0 0 0 0
2 0 1 0 0 0
3 1 0 0 0 0
4 0 0 1 0 0
5 1 0 0 0 0
6 0 0 1 0 0
7 1 0 0 0 0
8 0 1 0 0 0
9 0 0 0 0 1
10 0 0 0 1 0
我想將這些列重新分類為名為“種族”的單列,其中白色 = 0,黑色 = 1,亞洲 = 2,西班牙裔 = 3,其他 = 4。最后一列如下所示:
ID White Black Asian Hisp Other Race
1 1 0 0 0 0 0
2 0 1 0 0 0 1
3 1 0 0 0 0 0
4 0 0 1 0 0 2
5 1 0 0 0 0 0
6 0 0 1 0 0 2
7 1 0 0 0 0 0
8 0 1 0 0 0 1
9 0 0 0 0 1 4
10 0 0 0 1 0 3
uj5u.com熱心網友回復:
我們可以用 max.col
df$Race <- max.col(df[-1], 'first')-1
-輸出
> df
ID White Black Asian Hisp Other Race
1 1 1 0 0 0 0 0
2 2 0 1 0 0 0 1
3 3 1 0 0 0 0 0
4 4 0 0 1 0 0 2
5 5 1 0 0 0 0 0
6 6 0 0 1 0 0 2
7 7 1 0 0 0 0 0
8 8 0 1 0 0 0 1
9 9 0 0 0 0 1 4
10 10 0 0 0 1 0 3
資料
df <- structure(list(ID = 1:10, White = c(1L, 0L, 1L, 0L, 1L, 0L, 1L,
0L, 0L, 0L), Black = c(0L, 1L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 0L
), Asian = c(0L, 0L, 0L, 1L, 0L, 1L, 0L, 0L, 0L, 0L), Hisp = c(0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L), Other = c(0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 1L, 0L)), class = "data.frame", row.names = c(NA,
-10L))
uj5u.com熱心網友回復:
您可以使用 dplyr 包并使用case_when和mutate函式。
library(dplyr)
df_new <- df %>% mutate(
Race = case_when(
White == 1 ~ 0,
Black == 1 ~ 1,
Asian == 1 ~ 2,
Hisp == 1 ~ 3,
Other == 1 ~ 4
)
)
uj5u.com熱心網友回復:
使用 apply 函式按行執行回圈,并使用哪個函式在行中查找 1 的索引。
df$Race <- apply(df[,-1], 1, function(x) which(1 == x)-1)
輸出是
ID White Black Asian Hisp Other Race
1 1 1 0 0 0 0 0
2 2 0 1 0 0 0 1
3 3 1 0 0 0 0 0
4 4 0 0 1 0 0 2
5 5 1 0 0 0 0 0
6 6 0 0 1 0 0 2
7 7 1 0 0 0 0 0
8 8 0 1 0 0 0 1
9 9 0 0 0 0 1 4
10 10 0 0 0 1 0 3
uj5u.com熱心網友回復:
您可以為此使用tidyr'sgather函式。
library(tidyverse)
df %>%
mutate(Race =
df %>%
gather(Race, flag, White:Other, factor_key = T) %>%
filter(flag == 1) %>%
arrange(ID) %>%
summarize(Race = as.numeric(as.factor(Race))-1)
)
其中產生:
ID White Black Asian Hisp Other Race
1 1 1 0 0 0 0 0
2 2 0 1 0 0 0 1
3 3 1 0 0 0 0 0
4 4 0 0 1 0 0 2
5 5 1 0 0 0 0 0
6 6 0 0 1 0 0 2
7 7 1 0 0 0 0 0
8 8 0 1 0 0 0 1
9 9 0 0 0 0 1 4
10 10 0 0 0 1 0 3
注意:如果沒有as.numeric(as.factor())它,它將創建一個帶有“白色”、“黑色”等而不是索引的字符列。也許你更喜歡那個?
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/338643.html
上一篇:如何自動多次更換?
