r - if else: else 部分不返回输出
问题描述
我目前正在尝试循环遍历整数和字符的数据框,并有条件地更改每一行的一个值。对于所有不符合条件的行,我只想将它们添加回一个填充有修改后的行的新数据框中。
我以前做过这个,没有任何问题,但我觉得好像我盯着这个太久了,没有任何启发。
a<-data.frame(cbind(1,'a',2,'c',3,'d'), stringsAsFactors = F)
b<-data.frame(cbind(1,'a',2,'c',3,'g'), stringsAsFactors = F)
c<-data.frame(cbind(1,'f',4,'g',5,'h'), stringsAsFactors = F)
x<-rbind(a,b,c)
fun<-function(x){
fin<-NULL
for(i in 1:nrow(x)){
v<-x[i+1,]
if ((x[i,1]== v[i,1]) & (x[i,2]==v[i,2]) ){
x[i,3]<-"f"
fin<-rbind(fin, x[i,])
}else {fin<-rbind(fin, x[i,]) }
return(fin)
}
}
fun(x)
X1 X2 X3 X4 X5 X6
1 1 a f c 3 d
>
我想要的结果:
X1 X2 X3 X4 X5 X6
1 1 a f c 3 d
1 1 a 2 c 3 g
1 1 f 4 g 5 h
解决方案
或替代方案:
library(dplyr)
library(magrittr)
> z <- x %>% mutate(match = ifelse(( (lead(X1)==X1) & (lead(X2)==X2)),"YES","NO"))
> z %>% mutate(X3 = replace(X3, match=="YES", "f"))
X1 X2 X3 X4 X5 X6 match
1 1 a f c 3 d YES
2 1 a 2 c 3 g NO
3 1 f 4 g 5 h <NA>
推荐阅读
- ios - 与文件应用程序共享应用程序文档中的特定目录
- c# - process.StandardOutput 仅检索部分数据
- list - 将 where 方法与 List 一起使用
- azure - Azure 上的 Terraform 公共 IP 输出
- firebase - 使用 Firebase Auth 通过 gapi SDK 访问 google API 时遇到问题
- python - AWS Sagemaker,InvokeEndpoint 操作,模型错误:“使用序列设置数组元素。”
- excel - 在布尔值中添加 OR 语句
- sql - 为什么从日期时间到 varchar 的 CAST 在一个环境中工作而不在另一个环境中工作?
- syntax - “F: FnOnce(&mut Resource
) -> R + 'static” 中的“R + 'static” 语法是什么意思? - javascript - 等效于 .each 和 .attr 的 javascript 原生