我正在嘗試將 R 中的多列合并為一個。
My data looks like this:
age gender a b c d e f race insured
1 13 Female 0 0 0 0 0 0 white 0
2 12 Female 0 0 0 0 0 0 white 1
3 19 Male 0 0 0 0 0 1 other 0
4 19 Female 0 1 0 0 0 0 white 0
5 13 Female 1 1 0 0 0 1 white 0
這就是我想要的輸出:
age gender race insured value
1 13 Female white 0 none
2 12 Female white 1 none
3 19 Male other 0 f
4 19 Female white 0 b
5 13 Female white 0 a
5 13 Female white 0 b
5 13 Female white 0 f
我試過使用 Gather 創建一個長資料框,但這并沒有像我想要的那樣將資料添加到資料框中。如何使用 dplyr 或 tidyverse 包執行此操作?
uj5u.com熱心網友回復:
另一種方式
df <- read.table(text = ' row_num age gender a b c d e f race insured
1 13 Female 0 0 0 0 0 0 white 0
2 12 Female 0 0 0 0 0 0 white 1
3 19 Male 0 0 0 0 0 1 other 0
4 19 Female 0 1 0 0 0 0 white 0
5 13 Female 1 1 0 0 0 1 white 0', header = T)
df
#> row_num age gender a b c d e f race insured
#> 1 1 13 Female 0 0 0 0 0 0 white 0
#> 2 2 12 Female 0 0 0 0 0 0 white 1
#> 3 3 19 Male 0 0 0 0 0 1 other 0
#> 4 4 19 Female 0 1 0 0 0 0 white 0
#> 5 5 13 Female 1 1 0 0 0 1 white 0
library(tidyverse)
nm <- c('a', 'b', 'c', 'd', 'e', 'f')
df %>% mutate(across(a:f, as.logical)) %>%
nest(value = c(a, b, c, d, e, f)) %>%
mutate(value = map(value, ~ ifelse(length(nm[unlist(.)]) == 0,
'none',
paste(unlist(nm[unlist(.)]), collapse = ',')
)
)) %>%
unnest(value) %>%
separate_rows(value, sep = ',')
#> # A tibble: 7 x 6
#> row_num age gender race insured value
#> <int> <int> <chr> <chr> <int> <chr>
#> 1 1 13 Female white 0 none
#> 2 2 12 Female white 1 none
#> 3 3 19 Male other 0 f
#> 4 4 19 Female white 0 b
#> 5 5 13 Female white 0 a
#> 6 5 13 Female white 0 b
#> 7 5 13 Female white 0 f
由reprex 包( v2.0.0 )于 2021 年 11 月 16 日創建
uj5u.com熱心網友回復:
使用tidyverse. dat4是最終的輸出。
library(tidyverse)
dat2 <- dat %>%
mutate(ID = 1:n())
dat3 <- dat2 %>%
pivot_longer(a:f, names_to = "value", values_to = "number") %>%
filter(number == 1) %>%
select(-number)
dat4 <- dat2 %>%
left_join(dat3) %>%
select(-ID, -c(a:f)) %>%
replace_na(list(value = "none"))
dat4
# age gender race insured value
# 1 13 Female white 0 none
# 2 12 Female white 1 none
# 3 19 Male other 0 f
# 4 19 Female white 0 b
# 5 13 Female white 0 a
# 6 13 Female white 0 b
# 7 13 Female white 0 f
資料
dat <- read.table(text = " age gender a b c d e f race insured
1 13 Female 0 0 0 0 0 0 white 0
2 12 Female 0 0 0 0 0 0 white 1
3 19 Male 0 0 0 0 0 1 other 0
4 19 Female 0 1 0 0 0 0 white 0
5 13 Female 1 1 0 0 0 1 white 0",
header = TRUE)
uj5u.com熱心網友回復:
(不允許發表評論,也是一個相當新的用戶)
你給它的資訊非常少。如果您只想合并列,請查看合并命令,使用此命令您需要按列名系結兩者(您的 df1 和新的 Column1),首先將具有正確名稱的空列添加到您的資料框中,然后將它們合并:
names(df1)[11]<- "Value"
New_df <- merge(df1,Column1, by = "Value")
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/358138.html
上一篇:不使用回圈重新編碼多個變數
下一篇:根據條件從前一行提取值
