将多个变量中的分散信息折叠成 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)))
我有一些 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)))