R-基于条件对数据帧行进行处理

R-基于条件对数据帧行进行处理,r,conditional,R,Conditional,我试图理解如何根据条件处理数据帧的行。 有这样一个数据帧 > d<-data.frame(x=c(0,1,2,3), y=c(1,1,1,0)) > d x y 1 0 1 2 1 1 3 2 1 4 3 0 下面的代码似乎完成了部分工作,但只是打印执行操作的行、执行操作的次数(2) >用于(1中的i:nrow(d)){ +d[d[i,]==0,]d xy 1 1 2 2 4 1 3 1 2 4 4 1 我相信有一个简单的解决方案,也许是一个应用函数,但我还没有做到 谢

我试图理解如何根据条件处理数据帧的行。 有这样一个数据帧

> d<-data.frame(x=c(0,1,2,3), y=c(1,1,1,0))
> d
  x y
1 0 1
2 1 1
3 2 1
4 3 0
下面的代码似乎完成了部分工作,但只是打印执行操作的行、执行操作的次数(2)

>用于(1中的i:nrow(d)){
+d[d[i,]==0,]d
xy
1 1 2
2 4 1
3 1 2
4 4 1
我相信有一个简单的解决方案,也许是一个应用函数,但我还没有做到

谢谢。

一些可能性:

# 1
idx <- which(d == 0, arr.ind = TRUE)[, 1]
d[idx, ] <- d[idx, ] + 1
# 2
t(apply(d, 1, function(x) x + any(x == 0)))
# 3
d + apply(d == 0, 1, max)

因为我们只对出现零的行感兴趣,所以我取
的第一列(d==0,arr.ind=TRUE)
并通过
d[idx,]将1添加到这些行中的所有元素中,好的,所以答案不是那么简单(至少对我来说…)。你能详细说明每个函数吗?@PedroA为了简单起见,我建议
idx=d$x==0 | d$y==0;d[idx,]=d[idx,]与1选项相似,但是,我觉得它有点干净。IMO,我只考虑选项1。选项2和3,虽然聪明,可能要比大矩阵的选项1慢。一般来说,最好使用子设置而不是迭代来处理R问题。是否需要显示改变的?行单独显示,还需要在添加1之前还是之后显示它?如果是在它之前,我可以写一个简单的代码!
> for(i in 1:nrow(d)){
+     d[d[i,]==0,]<-d[i,]+1
+ }
> d
  x y
1 1 2
2 4 1
3 1 2
4 4 1
# 1
idx <- which(d == 0, arr.ind = TRUE)[, 1]
d[idx, ] <- d[idx, ] + 1
# 2
t(apply(d, 1, function(x) x + any(x == 0)))
# 3
d + apply(d == 0, 1, max)
which(d == 0, arr.ind = TRUE)
     row col
[1,]   1   1
[2,]   4   2