首页 > 解决方案 > For - 循环遍历行和列,填充一个空数据帧,具体取决于另一个数据帧 (r) 的值

问题描述

我尝试用 1 - 3 的值填充一个空数据框 (pen_NA),具体取决于另一个数据框 (pen_2) 中值的高度。没有错误消息,但代码也没有完成这项工作。有一些提示吗?

我的数据框如下所示: Trait1 Trait2 ... Plant.nr.1 value value ... Plant.nr.2 value value ... ...

for (j in 1:ncol(pen_NA)) {

 for (i in which(is.na(pen_NA[,j]))) { 
  
    if (pen_2[i,j] > 3) 
  {pen_NA[i,j]== 1}
  else if (pen_2[i,j] < 3)
  {pen_NA[i,j]== 2}
  else if (pen_2[i,j] == 3)  
  {pen_NA[i,j]== 3}
  else
  pen_NA[i,j]== pen_NA[i,j]
 }}

标签: rfor-loopif-statement

解决方案


如果 Trait2 为 1,我们将 Trait1 的缺失值归为 1,如果 Trait2 为零,则使用 2:

library(tidyverse)
traits_a <- tibble(Plant_id = seq(4), Trait1 = c(NA,NA,0,0))
traits_a
#> # A tibble: 4 x 2
#>   Plant_id Trait1
#>      <int>  <dbl>
#> 1        1     NA
#> 2        2     NA
#> 3        3      0
#> 4        4      0
traits_b <- tibble(Plant_id = seq(4),Trait2 = c(1,0,0,1))
traits_b
#> # A tibble: 4 x 2
#>   Plant_id Trait2
#>      <int>  <dbl>
#> 1        1      1
#> 2        2      0
#> 3        3      0
#> 4        4      1

traits_a %>%
  left_join(traits_b) %>%
  mutate(
    Trait1 = case_when(
      !is.na(Trait1) ~ Trait1,
      Trait2 == 1 ~ 1,
      Trait2 == 0 ~ 2
    )
  )
#> Joining, by = "Plant_id"
#> # A tibble: 4 x 3
#>   Plant_id Trait1 Trait2
#>      <int>  <dbl>  <dbl>
#> 1        1      1      1
#> 2        2      2      0
#> 3        3      0      0
#> 4        4      0      1

reprex 包于 2021-11-09 创建(v2.0.1)


推荐阅读