我有一个带有多列的收件箱,我想用"聚结"将其变成一列.每个现有列都是每个位置(行)的不同深度数据源.我需要最终的"深度"列,其中从该行中 Select 第一个非NA值.

我的数据充满了NA值,其中数值稀疏,如下所示:

df <- data.frame(col1=c("A","B","C","D"), col2=c(NA,NA,NA,NA), col3=c(-94.2,-95.3,NA,NA),col4=c(-91.2,NA,-90.7,-90.9)
df
  col1 col2  col3  col4
1    A   NA -94.2 -91.2
2    B   NA -95.3    NA
3    C   NA    NA -90.7
4    D   NA    NA -90.9

我希望它看起来像这样:

col1 col2  col3  col4 depth
1    A   NA -94.2 -91.2 -94.2
2    B   NA -95.3    NA -95.3
3    C   NA    NA -90.7 -90.7
4    D   NA    NA -90.9 -90.9

我try 使用以下代码来做到这一点: df %>% mutate(depth = coalesce(2:4)

并且还 df %>% coalesce(2:4)

但只收到错误:

Err或 in `mutate()`:
ℹ In argument: `depth = coalesce(2:4)`.
Caused by err或:
! `depth` must be size 4 或 1, not 3.

Err或 in `coalesce()`:
! Can't recycle `..1` (size 4) to match `..2` (size 3).

我已经判断过了,框架中的所有列都是相同的长度.

I would appreciate any help, I can't find any similar questions 或 guidance online! Thanks

推荐答案

您可以在这里使用!!!,它会传递变量:

df$depth <- coalesce(!!!df[-1]) # or coalesce(!!!df[2:4])

# or

df %>%
  mutate(depth = coalesce(!!!df[-1]))

两者都给出:

#   col1 col2  col3  col4 depth
# 1    A   NA -94.2 -91.2 -94.2
# 2    B   NA -95.3    NA -95.3
# 3    C   NA    NA -90.7 -90.7
# 4    D   NA    NA -90.9 -90.9

R相关问答推荐

Tidyverse/Djirr为从嵌套列表中提取的列名赋值的解决方案

根据R中的另一个日期从多列中 Select 最近的日期和相应的结果

以R中的正确顺序将日期时间字符列转换为posixct

如何利用模型函数在格图中添加双曲/指数曲线

将包含卷的底部25%的组拆分为2行

R中插入符号训练函数的中心因子和尺度因子预测

计算满足R中条件的连续列

解析R函数中的变量时出现的问题

KM估计的差异:SvyKm与带权重的调查

如何对r中包含特定(未知)文本的行求和?

远离理论值的伽马密度曲线下面积的近似

我如何使用循环来编写冗余的Rmarkdown脚本?

按组跨多列创建伪变量

有没有办法通过str_Detect()或其他字符串匹配函数来连接两个长度不等的数据帧?

为什么不能使用lApply在包装函数中调用子集

R-使用stri_trans_General()将其音译为德语字母

从矩阵创建系数图

根据向量对列表元素进行排序

R,将组ID分配给另一个观测ID变量中的值的组合

对计算变量所有唯一值的变量进行变异