R 根据行中存在的特定值替换行中的值
以下是我正在使用的数据集:R 根据行中存在的特定值替换行中的值,r,for-loop,mutate,R,For Loop,Mutate,以下是我正在使用的数据集: 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出现在一行中时,该行中的所有剩余值应显示为
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循环、mutate in tidy等循环遍历我的数据集并读取每一行,直到它在该行中找到值1(如果适用)。如果它发现该值为1,则让它将该行中的所有剩余值替换为“Complete”,因为这应该是默认值
数据应该是这样的:
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" }
对于(i in 1:nrow(data)){position检查此解决方案:
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)
库(dplyr)
图书馆(tidyr)
df%>%
聚集(键,val,x1:x5)%>%
分组依据(ID)%>%
变异(
检查=val==1,
检查=总和(检查),
val=如果有其他(
val<1&check==1 | val==1&check>1,
"完成",,
as.字符(val)
)
) %>%
选择(-check)%>%
排列(键,val)
一种不同的tidyverse
方法可以是:
df %>%
gather(var, val, -ID) %>%
group_by(ID) %>%
mutate(val = ifelse(row_number() > row_number(val == "1"), "Complete", val)) %>%
spread(var, val)
ID x1 x2 x3 x4 x5
<int> <chr> <chr> <chr> <chr> <chr>
1 1 0 0 1 Complete Complete
2 2 0 0.5 0.5 1 Complete
3 3 0 0.25 0.25 .5 .75
4 4 0 0.5 1 Complete Complete
df%>%
聚集(变量,值,-ID)%>%
分组依据(ID)%>%
变异(val=ifelse(row_number()>row_number(val==“1”),“Complete”,val))%>%
价差(var,val)
内径x1x2x3x4x5
1 1 0 0 1完成-完成
2 0 0.5 0.5 1完成
3 3 0 0.25 0.25 .5 .75
4 0 0.5 1完成
在第一步中,它将数据从宽格式转换为长格式。第二步,如果行数(每组)大于值为1的行数,它将指定“完成”。最后,它将数据转换回原始格式。一个“老派”解决方案:
ncol