[英]How to combine multiple columns into one column and attach their unique code in R?
[英]How can I combine multiple columns into one in an R dataset?
我正在嘗試將 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 包執行此操作?
使用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)
另一種方式
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
(不允許發表評論,也是一個相當新的用戶)
你給它的信息非常少。 如果您只想合並列,請查看合並命令,使用此命令您需要按列名綁定兩者(您的 df1 和新的 Column1),首先將具有正確名稱的空列添加到您的數據框中,然后將它們合並:
names(df1)[11]<- "Value"
New_df <- merge(df1,Column1, by = "Value")
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.