r - 如何用另一行的值替换某些行的值?
问题描述
我有一个这样的数据框:
df <- data.frame("F" = c("N°", "X", "X", "Total", "N°", "X", "X", "X", "X", "Total"), "N" = c("6", "123", "123", "123", "8", "123", "123", "123", "123", "123"))
在我的示例中,“X”不是真正的“X”只是为了替换单元格中可能存在的内容。
我一直在使用循环来实现这一点,但我想避免这种情况,因为我有一个非常大的数据框,所以我正在寻找一个函数或其他方法来实现它。
我期望的结果是:
df <- data.frame("F" = c("N°", "6", "6", "Total", "N°", "8", "8", "8", "8", "Total"), "N" = c("6", "123", "123", "123", "8", "123", "123", "123", "123", "123"))
解决方案
我们通过逻辑向量('grp')的累积和,然后replace
'F'中的'X'值与first
'N'的元素,ungroup
并根据F列中“N”的出现创建一个分组列,删除分组变量
library(dplyr)
df %>%
group_by(grp = cumsum(grepl("^N", F))) %>%
mutate(F = replace(as.character(F),
!F %in% c("N°", "Total"), first(as.character(N)))) %>%
ungroup %>%
select(-grp)
# A tibble: 10 x 2
# F N
# <chr> <fct>
# 1 N° 6
# 2 6 123
# 3 6 123
# 4 Total 123
# 5 N° 8
# 6 8 123
# 7 8 123
# 8 8 123
# 9 8 123
#10 Total 123
推荐阅读
- ajax - 以非登录用户身份在 WordPress 数据库中插入数据
- javascript - JavaScript 获取传入参数的函数实例
- mysql - 与子查询相比,为什么左外连接查询给出不同的结果?
- javascript - 在 Showdown 中忽略多个 \n 实例
- python - Python 没有检测到 Heroku 配置
- image - 用于签署 Node/Cloudinary 的签名字符串无效
- java - Hibernate如何使实体类的模式名称可配置
- java - isShowing() 与 isDisplayable()
- arrays - 在屏幕上访问和显示嵌套数组 React Native
- c++ - C++中多线程并发向单个MySQL表插入数据