r - R对字符串中的数字求和
问题描述
我有个问题:
我有一个像这个简单示例这样的数据集:
df<-data.frame(ID=c("A","B","C","D"),
Score=c("15","16/18/19+2/6","3/+2","19/18/14"))
我想得到一个拆分score
数字的数据集。我的零件有问题/+2
。当它说它"3/+2"
实际上意味着:"3/3+2"
最终会给出"3/5"
. 所以我需要一些帮助,最终得到一个这样的数据集:
ID Score
A 15
B 16/18/19/21/6
C 3/5
D 19/18/14
我已经发现我可以将分数分开
df<-df %>%
mutate(Score = strsplit(as.character(ID), "/")) %>%
unnest(Score)
但我不知道如何让数字重复然后在 /+ 发生时求和,有人可以帮我吗?
解决方案
它可能会以更优雅的方式解决,但这里有一种可能性:
df %>%
mutate(Score = strsplit(as.character(Score), "/")) %>%
unnest() %>%
rowwise() %>%
mutate(Score = eval(parse(text = paste0(Score)))) %>%
group_by(ID) %>%
mutate(Score = paste0(Score, collapse = "/")) %>%
distinct()
ID Score
<fct> <chr>
1 A 15
2 B 16/18/21/6
3 C 3/5
4 D 19/18/14
样本数据:
df <- data.frame(ID=c("A","B","C","D"),
Score=c("15","16/18/19+2/6","3/3+2","19/18/14"))
它基于 / 拆分“分数”,将字符转换为表达式parse()
,然后将其转换回来。
使用您提供的数据和来自@A 的模式。苏里曼:
df %>%
mutate(Score = strsplit(gsub("(\\d+)/*\\+(\\d+)","\\1/\\1+\\2", Score), "/")) %>%
unnest() %>%
rowwise() %>%
mutate(Score = eval(parse(text = paste0(Score)))) %>%
group_by(ID) %>%
mutate(Score = paste0(Score, collapse = "/")) %>%
distinct()
ID Score
<fct> <chr>
1 A 15
2 B 16/18/19/21/6
3 C 3/5
4 D 19/18/14
推荐阅读
- javascript - 为什么我应该在 Typescript 中使用接口
- php - 从 PHP PDO 调用 SQL 存储过程
- android - 后台服务暂停并在 OREO 上自动重新启动
- spring-boot - MSIS0037:未找到颁发者的签名验证证书
- libgdx - 使用 setBounds 调整 Sprite 大小后如何旋转 Sprite?(LIBGDX)
- python - 反向传播成本函数误差增加而不是减少
- powershell - 使用 powershell 重命名目录中具有给定名称的所有文件夹
- python - sklearn 使用带有自定义指标的 RandomizedSearchCV 并捕获异常
- android - 如何根据某些操作从活动堆栈中删除特定活动/活动?
- jestjs - 如何防止 babel-jest 在项目中使用 babel 配置文件?