组合具有相同前缀的数据框列
Combining dataframe columns with same prefix
我有一个数据框,其中包含多个 Boruta 变量选择的结果,其中来自不同来源的环境变量作为预测变量。这些预测变量通常来自不同的来源(例如来源 a、b、c),因此一些预测变量使用不同的后缀进行编码,但代表相同的参数(例如 nitrogen_a、nitrogen_b、nitrogen_c , phosphate_a, phosphate_b 等)。
我需要一种方法来使用类似 grepl() 的方法来识别和分组具有相同名称开头的变量,并将它们折叠成具有共享变量(例如氮、磷酸盐)的单个变量。
请注意,对于每一行,在具有共享变量名称前缀的集合中只有一个变量包含非 NA 值。因此,应该可以通过简单地排除 NA 值将多个变量合并为一个变量。所有变量都是字符向量。
我该怎么做?
您的结果目前为宽格式。我采取的策略是首先使数据变长,删除 NA
行,然后使用更新的列名再次使 table 变宽。这是一个 tidyverse 解决方案:
library(tidyverse)
data = tribble(
~ id, ~ x_1, ~ x_2, ~ y_1, ~ y_2,
"a", 1, NA, 100, NA,
"b", NA, 2, NA, 200
)
data %>%
pivot_longer(-id) %>%
filter(!is.na(value)) %>%
# Update name so that everything until the _ is kept
mutate(name = str_extract(name, "[^_]+")) %>%
pivot_wider(names_from = "name", values_from = "value")
数据:
> data
# A tibble: 2 x 5
id x_1 x_2 y_1 y_2
<chr> <dbl> <dbl> <dbl> <dbl>
1 a 1 NA 100 NA
2 b NA 2 NA 200
输出:
# A tibble: 2 x 3
id x y
<chr> <dbl> <dbl>
1 a 1 100
2 b 2 200
我有一个数据框,其中包含多个 Boruta 变量选择的结果,其中来自不同来源的环境变量作为预测变量。这些预测变量通常来自不同的来源(例如来源 a、b、c),因此一些预测变量使用不同的后缀进行编码,但代表相同的参数(例如 nitrogen_a、nitrogen_b、nitrogen_c , phosphate_a, phosphate_b 等)。
我需要一种方法来使用类似 grepl() 的方法来识别和分组具有相同名称开头的变量,并将它们折叠成具有共享变量(例如氮、磷酸盐)的单个变量。
请注意,对于每一行,在具有共享变量名称前缀的集合中只有一个变量包含非 NA 值。因此,应该可以通过简单地排除 NA 值将多个变量合并为一个变量。所有变量都是字符向量。
我该怎么做?
您的结果目前为宽格式。我采取的策略是首先使数据变长,删除 NA
行,然后使用更新的列名再次使 table 变宽。这是一个 tidyverse 解决方案:
library(tidyverse)
data = tribble(
~ id, ~ x_1, ~ x_2, ~ y_1, ~ y_2,
"a", 1, NA, 100, NA,
"b", NA, 2, NA, 200
)
data %>%
pivot_longer(-id) %>%
filter(!is.na(value)) %>%
# Update name so that everything until the _ is kept
mutate(name = str_extract(name, "[^_]+")) %>%
pivot_wider(names_from = "name", values_from = "value")
数据:
> data
# A tibble: 2 x 5
id x_1 x_2 y_1 y_2
<chr> <dbl> <dbl> <dbl> <dbl>
1 a 1 NA 100 NA
2 b NA 2 NA 200
输出:
# A tibble: 2 x 3
id x y
<chr> <dbl> <dbl>
1 a 1 100
2 b 2 200