我想做以下的NA替换,但我不知道如何处理它.

我有两列,现在我的数据框中如下所示:

> head(Metaverse[c("Q7","Q8")],10)
# A tibble: 10 × 2
   Q7    Q8   
   <chr> <chr>
 1 NA    1    
 2 1     NA   
 3 NA    1    
 4 1     NA   
 5 NA    NA   
 6 NA    1    
 7 1     NA   
 8 NA    1    
 9 1     NA   
10 1     NA   

现在,只要两列中都有NA(见第5行),我就想在Q7列中放置1(同时将NA留在Q8中).

有人知道怎么做吗?

谢谢

推荐答案

Q7Q8都缺失时,可以使用ifelse()来判断条件.如果为真,则结果为1,否则将值保持在Q7.下面的代码就是这样做的.注意,您发布的数据没有任何这样的条目,所以我将第二个观察值的Q7值更改为NA,您可以在结果中看到它更改为1.

dat <- read.table(textConnection("Q7    Q8   
NA    1    
1     NA   
NA    NA    
1     NA   
NA    NA   
NA    1    
1     NA   
NA    1    
1     NA   
1     NA"), header=TRUE)   

dat$Q7 <- ifelse(is.na(dat$Q7) & is.na(dat$Q8), 1, dat$Q7)
dat
#>    Q7 Q8
#> 1  NA  1
#> 2   1 NA
#> 3   1 NA
#> 4   1 NA
#> 5   1 NA
#> 6  NA  1
#> 7   1 NA
#> 8  NA  1
#> 9   1 NA
#> 10  1 NA

创建于2023-05-03年第reprex v2.0.2


Speed Benchmarks

comments 中有一些关于速度的讨论.以下是提出的不同方法的基准.不足为奇的是,这里的dplyr管道速度要慢一些.我的经验是,他们的dplyr对于小问题来说是慢的,对于大问题来说是快的(尽管在任何特定的情况下都是YMMV).这两种基本的方法彼此没有明显的区别,尽管ifelse()略有优势.

library(microbenchmark)
microbenchmark( 
"ifelse_baseR" = {dat$Q7 <- ifelse(is.na(dat$Q7) & is.na(dat$Q8), 1, dat$Q7)},
"rowSums_baseR" = {dat[rowSums(is.na(dat)) == 2, 'Q7'] <- 1}, 
"dplyr1" = {dat <- dat %>% mutate(Q7b = if_else(rowSums(!is.na(cbind(Q7, Q8))) == 0, 1, Q7))}, 
"dplyr2" = {dat <- dat %>% mutate(Q7 = ifelse(rowSums(is.na(.)) == ncol(.), 1, Q7))} 
)
#> Warning in microbenchmark(ifelse_baseR = {: less accurate nanosecond times to
#> avoid potential integer overflows
#> Unit: microseconds
#>           expr     min       lq      mean   median       uq      max neval cld
#>   ifelse_baseR   5.863   7.4210   9.48658   9.7580  10.9470   14.391   100  a 
#>  rowSums_baseR  12.423  14.5755  18.33192  18.7575  20.2540   33.948   100  a 
#>         dplyr1 762.067 778.2620 898.97338 799.7665 842.2015 7422.886   100   b
#>         dplyr2 664.692 691.5060 783.42718 704.4825 757.5980 2851.222   100   b

创建于2023-05-03年第reprex v2.0.2

R相关问答推荐

如何根据包含相同值的某些列获取总额

在位置周围设定一个半径并识别该半径内的其他位置

为什么横向页面会导致officeverse中的页码/节头/页脚出现问题?

Rplotly中的Sankey Diagram:意外连接&

制作等距离的线串副本

如何调整曲线图中的y轴标签?

如何读取CSV的特定列时,给定标题作为向量

如何在R中通过多个变量创建交叉表?

从多层嵌套列表构建Tibble?

提高圣彼得堡模拟的速度

为什么我对圆周率图的蒙特卡罗估计是空的?

将工作目录子文件夹中的文件批量重命名为顺序

如何在使用Alpha时让geom_curve在箭头中显示恒定透明度

通过R:文件名未正确写入[已解决]将.nc文件转换和导出为.tif文件

如何在GALT包的函数&geom_x样条线中调整线宽

长/纬点继续在堪萨斯-SF结束,整齐的人口普查

以R表示的NaN值的IS.NA状态

无法保存gglot的所有pdf元素

如何修改Rust中的R字符串并将其赋给新的R变量,并使用extendr保留原始R字符串

根据列和行的不同组合 Select 各种单元格