R中字符串的类字典匹配
Dictionary-like matching on string in R
我有一个数据框,其中字符串变量是非正式的元素列表,可以按符号拆分。我想在另一个数据集的基础上对这些元素进行操作。
例如任务:计算元素之和
df_1 <- data.frame(element=c(1:2),groups=c("A,B,C","A,D"))
df_2 <- data.frame(groups=c("A","B","C","D"), values=c(1:4))
desired <- data.frame(element=c(1:2),groups=c("A,B,C","A,D"),sum=c(6,5))
一个选项是用分隔符 ,
拆分 'groups' 以使用 separate_rows
扩展行,与 key/val 数据集进行连接('df_2'), 由 'element' 生成, 得到 'values'
的 sum
library(tidyverse)
df_1 %>%
separate_rows(groups) %>%
left_join(df_2) %>%
group_by(element) %>%
summarise(groups = toString(groups), sum = sum(values))
# A tibble: 2 x 3
# element groups sum
# <int> <chr> <int>
#1 1 A, B, C 6
#2 2 A, D 5
或者 base R
的另一种选择是使用命名的 key/value vector
'nm1') 来更改拆分的 list
元素中的值, sum
并将其分配给 'df_1'
中的新列
nm1 <- setNames(df_2$values, df_2$groups)
df_1$sum <- sapply(strsplit(as.character(df_1$groups), ","), function(x) sum(nm1[x]))
我有一个数据框,其中字符串变量是非正式的元素列表,可以按符号拆分。我想在另一个数据集的基础上对这些元素进行操作。
例如任务:计算元素之和
df_1 <- data.frame(element=c(1:2),groups=c("A,B,C","A,D"))
df_2 <- data.frame(groups=c("A","B","C","D"), values=c(1:4))
desired <- data.frame(element=c(1:2),groups=c("A,B,C","A,D"),sum=c(6,5))
一个选项是用分隔符 ,
拆分 'groups' 以使用 separate_rows
扩展行,与 key/val 数据集进行连接('df_2'), 由 'element' 生成, 得到 'values'
sum
library(tidyverse)
df_1 %>%
separate_rows(groups) %>%
left_join(df_2) %>%
group_by(element) %>%
summarise(groups = toString(groups), sum = sum(values))
# A tibble: 2 x 3
# element groups sum
# <int> <chr> <int>
#1 1 A, B, C 6
#2 2 A, D 5
或者 base R
的另一种选择是使用命名的 key/value vector
'nm1') 来更改拆分的 list
元素中的值, sum
并将其分配给 'df_1'
nm1 <- setNames(df_2$values, df_2$groups)
df_1$sum <- sapply(strsplit(as.character(df_1$groups), ","), function(x) sum(nm1[x]))