我有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)
})
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)
DataFrame with 7 rows and 2 columns
v1 v2
<numeric> <numeric>
1 1e-06 4.551651e-38
2 1e-05 3.519523e-33
3 0e+00 0e+00
4 0e+00 0e+00
5 0e+00 0e+00
6 1e-07 4.551651e-38
7 0e+00 0e+00
DataFrame with 7 rows and 2 columns
v1 v2
<numeric> <numeric>
1 1e-06 4.551651e-38
2 1e-05 3.519523e-33
3 1e-07 4.551651e-38
如何获得所需的输出?
答案 0 :(得分:1)
您需要使用!=
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,]
答案 1 :(得分:0)
正如@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
答案 2 :(得分:0)
不确定这是否是您要找的:
dat[dat$v1 == 0,][,2] <- 0e+00
dat[dat$v1 != 0,]
答案 3 :(得分:0)
将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$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