r - R中字符串的类字典匹配

标签 r dplyr strsplit vocabulary

我有一个数据框,其中一个字符串变量是一个非正式的元素列表,可以按符号拆分。我想在另一个数据集的基础上对这些元素进行操作。

例如任务:计算元素之和

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))

最佳答案

一个选项是通过分隔符 拆分“组”, 以使用 separate_rows 扩展行,与键/值数据集 ('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 的另一种选择是使用命名键/值 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]))

关于r - R中字符串的类字典匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56223781/

相关文章:

r - 根据向量的水平创建列

r - 将字符串转换为符号,然后转换为 !! 识别的 quosure在整洁的宇宙中

正则表达式用于匹配所有逗号,除非它们包含在圆括号或方括号之间

R::在r中将字符串从 "x,y"反转为 "y,x"

r - 使用 ggplot 循环按名称访问字段

r - 如何将日期范围打印为字符串?

r - 将自定义缩放模型应用于数据框?

R 中的正则表达式 strsplit 表达式,因此它仅适用于每个字符串中特定字符的第一次出现?

r - := (pass by reference) operator in the data. 表包同时修改另一个数据表对象

r - dplyr 代码 "df %>% group_by(date = cut(date, breaks = "1 小时"))"不再产生所需的结果?