将具有相似列名/相似列字符串的列组合起来 - Reprex
Combine Columns with Similar Column Names / Similar Column Strings - Reprex
目标:仅根据列名的相似性合并多个列。
问题: 我正在处理一个大型数据集,其中列名被复制并且看起来像这样:wk1.1、wk1.2、wk1.3。对于每一行,相似的列名中只会有一个值,其他的都为NA。 Coalesce 非常有用,但当我必须列出每个列名称时变得乏味(搞乱自动化)。有没有办法根据一串字符合并?例如下面,我更愿意合并 %in% "wk1."
library(dplyr)
wk1.1 <- c(15, 4, 1)
wk1.2 <- c(3, 20, 4)
wk1.3 <- c(1, 2, 17)
df <- data.frame(wk1.1, wk1.2, wk1.3)
df[df < 14] <- NA
df1 <- df %>%
mutate(wk1 = coalesce(df$wk1.1, df$wk1.2, df$wk1.3))
我们可以用!!!
拼接它
library(dplyr)
df %>%
mutate(wk1 = coalesce(!!! .))
# wk1.1 wk1.2 wk1.3 wk1
#1 15 NA NA 15
#2 NA 20 NA 20
#3 NA NA 17 17
或者另一种选择是 reduce
并应用 coalesce
library(purrr)
df %>%
mutate(wk1 = reduce(., coalesce))
目标:仅根据列名的相似性合并多个列。
问题: 我正在处理一个大型数据集,其中列名被复制并且看起来像这样:wk1.1、wk1.2、wk1.3。对于每一行,相似的列名中只会有一个值,其他的都为NA。 Coalesce 非常有用,但当我必须列出每个列名称时变得乏味(搞乱自动化)。有没有办法根据一串字符合并?例如下面,我更愿意合并 %in% "wk1."
library(dplyr)
wk1.1 <- c(15, 4, 1)
wk1.2 <- c(3, 20, 4)
wk1.3 <- c(1, 2, 17)
df <- data.frame(wk1.1, wk1.2, wk1.3)
df[df < 14] <- NA
df1 <- df %>%
mutate(wk1 = coalesce(df$wk1.1, df$wk1.2, df$wk1.3))
我们可以用!!!
library(dplyr)
df %>%
mutate(wk1 = coalesce(!!! .))
# wk1.1 wk1.2 wk1.3 wk1
#1 15 NA NA 15
#2 NA 20 NA 20
#3 NA NA 17 17
或者另一种选择是 reduce
并应用 coalesce
library(purrr)
df %>%
mutate(wk1 = reduce(., coalesce))