r - 根据行中特定值的存在替换行中的值
问题描述
这是我正在使用的数据集:
ID x1 x2 x3 x4 x5
1 0 0 1 .25 .25
2 0 .5 .5 1 Complete
3 0 .25 .25 .5 .75
4 0 .5 1 Complete Complete
当您看到值 1 连续出现时,该行中的所有剩余值都应显示为“完成”。我正在尝试解决此数据中的一个问题,您可以看到至少有一行不遵循该规则(第 1 行)。我想找到一种方法,或者通过 for 循环,在 tidy 中变异等来循环浏览我的数据集并读取每一行,直到它在该行中找到 1 的值(如果适用)。如果它发现该值为 1,则让它在该行中将所有剩余值替换为“完成”,因为无论如何这应该是默认值。
这应该是数据的样子:
ID x1 x2 x3 x4 x5
1 0 0 1 Complete Complete
2 0 .5 .5 1 Complete
3 0 .25 .25 .5 .75
4 0 .5 1 Complete Complete
我现在拥有的是:
for(i in 1:nrow(data)){ position <- which(data[i, ]==1)
data[,position+1] <- "Complete" }
解决方案
检查此解决方案:
library(dplyr)
library(tidyr)
df %>%
gather(key, val, x1:x5) %>%
group_by(ID) %>%
mutate(
check = val == 1,
check = cumsum(check),
val = if_else(
val < 1 & check == 1 | val == 1 & check > 1,
'Complete',
as.character(val)
)
) %>%
select(-check) %>%
spread(key, val)
推荐阅读
- r - 根据 .vars 之外的列转换多列
- python - 使用数据框处理 csv 文件时出现 KeyError
- python - KeyError:'id'当 may2One 关系 0d00 14
- dynamic - 滚动到相关部分时,Angular 8 突出显示动态生成的菜单项
- javascript - 信任函数
- oracle - 更新 Oracle 默认配置文件
- java - IntellijIDEA 不显示注释描述
- javascript - 当我扩展 Array 类时,filter() 是错误的
- postgresql - 无法使用 Dropbox 作为 url 在 Heroku 中导入本地 pg_dump
- amazon-web-services - Ansible + AWS EC2 插件 + 用户名 + 动态清单文件上的 ssh 密钥