将多个变量中的分散信息折叠成 R 中的 1

Collapsing scattered information across multiple variables into 1 in R

我有一些 table 数据分散在数据集中大约 1000 个变量中。大多数都分为 2 个变量,我可以使用 coalesce 将数据拼凑在一起,但是对于一些分布在 >10 的变量来说,这是非常低效的。有没有better/more有效的方法?

到目前为止我写的语法是:

scattered_data <- df %>%
select(id, contains("MASS9A_E2")) %>% 
#this brings in all the variables for this one question that start with this string
mutate(speciality = coalesce(MASS9A_E2_C4_1,MASS9A_E2_C4_2,MASS9A_E2_C4_3, MASS9A_E2_C4_4, MASS9A_E2_C4_5, MASS9A_E2_C4_6, MASS9A_E2_C4_7, MASS9A_E2_C4_8, MASS9A_E2_C4_9, MASS9A_E2_C5_1,MASS9A_E2_C5_2,MASS9A_E2_C5_3, MASS9A_E2_C5_4, MASS9A_E2_C5_5, MASS9A_E2_C5_6, MASS9A_E2_C5_7, MASS9A_E2_C5_8, MASS9A_E2_C5_9))

因为我有 28 个 MASS 问题,所以我真的很想能够更快地将它们折叠起来。

您可以使用 do.call() 将除 id 之外的所有列作为 coalesce() 的输入。

library(dplyr)

df %>%
  select(id, contains("MASS9A_E2")) %>%
  mutate(speciality = do.call(coalesce, select(df, -id)))

此外,可以通过Reduce()迭代调用coalesce()

df %>%
  select(id, contains("MASS9A_E2")) %>%
  mutate(speciality = Reduce(coalesce, select(df, -id)))