因此,col和prob可以被认为是一个包;他们一起去,例如,col2“与”问题2一起。
如何才能使col
中的单元格为<NA>
,与其对应的prob
也将替换为<NA>
?
数据:
col2 prob2 col3 prob3 col4 prob4 col5 prob5
2 0.126269620610401 <NA> 0.979143074247986 <NA> 0.150689669651911 <NA> 0.11148908524774
3 0.730431054253131 <NA> 0.826114872703329 <NA> 0.368350319797173 <NA> 0.299717969959602
2 0.320544729940593 3 0.0434977798722684 4 0.859434255165979 11 0.150506388396025
2 0.0354198240675032 3 0.240764779038727 5 0.276169682852924 <NA> 0.0449998050462455
目标:
col2 prob2 col3 prob3 col4 prob4 col5 prob5
2 0.126269620610401 <NA> <NA> <NA> 0.150689669651911 <NA> <NA>
3 0.730431054253131 <NA> <NA> <NA> 0.368350319797173 <NA> <NA>
2 0.320544729940593 3 0.0434977798722684 4 0.859434255165979 11 0.150506388396025
2 0.0354198240675032 3 0.240764779038727 5 0.276169682852924 <NA> <NA>
答案 0 :(得分:2)
您可以使用is.na.data.frame
创建is.na<-
使用“NA-out”“prob”列中相应值的结果:
is.na(dat[ , grep("prob", colnames(dat)) ]) <- is.na(dat[ , grep("col", colnames(dat)) ])
#------------------
> dat
col2 prob2 col3 prob3 col4 prob4 col5 prob5
1 2 0.12626962 <NA> NA <NA> NA <NA> NA
2 3 0.73043105 <NA> NA <NA> NA <NA> NA
3 2 0.32054473 3 0.04349778 4 0.8594343 11 0.1505064
4 2 0.03541982 3 0.24076478 5 0.2761697 <NA> NA
请注意,这使用了您的控制台输出,它作为任何“<NA>
- 包含”列作为因子列进入。你的?col?变量可能有问题,因为带有NA的真数字向量不会显示为<NA>
答案 1 :(得分:1)
如果同一行中的prob3
值为NA,则会将col3
值替换为NA:
dat$prob3 = ifelse(is.na(dat$col3), NA, dat$prob3))
答案 2 :(得分:1)
基于上一个答案,这里有一种方法可以在所有列 - 探测对中以编程方式执行此操作:
x <- data.frame(col2 = c(NA, NA, 1,2), prob2 = runif(4), col3 = c(3,4,NA,NA), prob3 = rnorm(4))
colColumns <- grep("col", names(x))
for (j in colColumns) {
x[ j+1] <- ifelse(is.na(x[, j]), NA, x[, j+1])
}
产生的int:
col2 prob2 col3 prob3
1 NA NA 3 1.359170
2 NA NA 4 1.165798
3 1 0.2701173 NA NA
4 2 0.6411366 NA NA