R语言 首次观测多个柱状体后的新柱状体

wi3ka0sx  于 2023-03-05  发布在  其他
关注(0)|答案(3)|浏览(123)

我有以下数据,想从A、B和C创建“New”变量:

structure(list(A = c("NA", "NA", "4", "NA"), B = c("NA", "3", 
"4", "5"), C = c("1", "NA", "NA", "5"), New = c(1, 3, 4, 5)), class = c("tbl_df", 
"tbl", "data.frame"), row.names = c(NA, -4L))

我只想从我尝试在dplyr中使用across但还不能弄清楚语法的任何列中得到第一个非NA观察结果。

ou6hu8tu

ou6hu8tu1#

使用pmax

df <- type.convert(df, as.is = TRUE)
df %>% 
  mutate(New = do.call(pmax, c(across(A:C), na.rm = TRUE)))

# A tibble: 4 × 4
  A     B     C     New  
  <int> <int> <int> <int>
1 NA    NA    1     1    
2 NA    3     NA    3    
3 4     4     NA    4    
4 NA    5     5     5
tquggr8v

tquggr8v2#

在提取第一个非NA之前,我们可能需要先将"NA"转换为NA

library(dplyr)
library(purrr)
df1 %>%
  type.convert(as.is = TRUE) %>%
  mutate(New = invoke(coalesce, pick(A:C)))
  • 输出
# A tibble: 4 × 4
      A     B     C   New
  <int> <int> <int> <int>
1    NA    NA     1     1
2    NA     3    NA     3
3     4     4    NA     4
4    NA     5     5     5

或从data.table使用fcoalecse

library(data.table)
df1 %>% 
  type.convert(as.is = TRUE) %>% 
  mutate(New = fcoalesce(pick(A:C)))
j1dl9f46

j1dl9f463#

通过选择第一个[1]非NA和is.na,使用apply的基本R选项如下:

df$New <- apply(df, 1, \(x) x[!is.na(x)][1])
df
#>      A    B    C New
#> 1 <NA> <NA>    1   1
#> 2 <NA>    3 <NA>   3
#> 3    4    4 <NA>   4
#> 4 <NA>    5    5   5

创建于2023年3月3日,使用reprex v2.0.2

相关问题