如何按行替换data.frame对象中的非零值作为默认值?

如何按行替换data.frame对象中的非零值作为默认值?,r,dataframe,data-manipulation,R,Dataframe,Data Manipulation,我有data.frame对象,它由两个向量v1,v2组成。从我的数据中可以看到,v1包含0e+00,我想将此值分配给包含0e+00的行。我试图这样做,但我没有得到我所期望的。如何在R中实现这一点? 然而,这是我的尝试,但它不起作用: res<- apply(data, 1, function(ro) { tmp<- ifelse(length(ro[[1]]==0 & !length(ro[[2]])==0),0e+00, ro) }) res您需要使用删除条目= v1

我有data.frame对象,它由两个向量v1,v2组成。从我的数据中可以看到,v1包含0e+00,我想将此值分配给包含0e+00的行。我试图这样做,但我没有得到我所期望的。如何在R中实现这一点? 然而,这是我的尝试,但它不起作用:

res<- apply(data, 1, function(ro) {
  tmp<- ifelse(length(ro[[1]]==0 & !length(ro[[2]])==0),0e+00, ro)
})

res您需要使用
删除条目=

v1 <- c( 1e-06,1e-05,0e+00,0e+00,0e+00,1e-07,0e+00)
v2 <- c(4.551651e-38,3.519523e-33,6.316980e-26,8.159048e-34,
        4.935429e-20,4.551651e-38,9.080082e-38)

dat <- data.frame(v1, v2)

dat[dat$v1 != 0e+00,]
v1正如@scoa所说:

#show data where v1 equals 0 (0e+00)
dat[dat$v1 == 0,]

  v1           v2
3  0 6.316980e-26
4  0 8.159048e-34
5  0 4.935429e-20
7  0 9.080082e-38

#show v2 where v1 equals 0 (0e+00)
dat$v2[dat$v1 == 0]

[1] 6.316980e-26 8.159048e-34 4.935429e-20 9.080082e-38

#Remove rows where v1 equals 0
dat[dat$v1 != 0,]

    v1           v2
1 1e-06 4.551651e-38
2 1e-05 3.519523e-33
6 1e-07 4.551651e-38

不确定这是否是您正在寻找的:

dat[dat$v1 == 0,][,2] <- 0e+00
dat[dat$v1 != 0,]

dat[dat$v1==0,][,2]对第二个输出使用grepl函数

dat <- dat[!grepl("^0",dat$v1),]
     v1           v2
1 1e-06 4.551651e-38
2 1e-05 3.519523e-33
6 1e-07 4.551651e-38

dat
data@scoa:它没有给我我所期望的。还有更好的主意吗?Thanks@scoa:非常感谢您的快速解决方案。我可以得到正确的输出。谢谢你的解决方案。谢谢。你的解决方案非常接近我的预期。不过,我接受了塞尔吉奥的回答。谢谢。你的回答也很有趣。
#show data where v1 equals 0 (0e+00)
dat[dat$v1 == 0,]

  v1           v2
3  0 6.316980e-26
4  0 8.159048e-34
5  0 4.935429e-20
7  0 9.080082e-38

#show v2 where v1 equals 0 (0e+00)
dat$v2[dat$v1 == 0]

[1] 6.316980e-26 8.159048e-34 4.935429e-20 9.080082e-38

#Remove rows where v1 equals 0
dat[dat$v1 != 0,]

    v1           v2
1 1e-06 4.551651e-38
2 1e-05 3.519523e-33
6 1e-07 4.551651e-38
dat[dat$v1 == 0,][,2] <- 0e+00
dat[dat$v1 != 0,]
dat <- dat[!grepl("^0",dat$v1),]
     v1           v2
1 1e-06 4.551651e-38
2 1e-05 3.519523e-33
6 1e-07 4.551651e-38
dat$v2 <- ifelse(grepl("^0",dat$v1),0e+00, dat$v2)
dat
     v1           v2
1 1e-06 4.551651e-38
2 1e-05 3.519523e-33
3 0e+00 0.000000e+00
4 0e+00 0.000000e+00
5 0e+00 0.000000e+00
6 1e-07 4.551651e-38
7 0e+00 0.000000e+00