- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在处理 R
中的数据框它有一些跨行的缺失值。接下来是数据框(dput
最后添加):
df
id V1 V2 V3 V4
1 01 1 1 1 NA
2 02 2 1 NA NA
3 03 3 1 NA NA
4 04 4 1 2 NA
每行都是不同的
id
.如您所见,行有缺失值。我想知道如何获得以这种风格完成的数据框
由于我的真实数据非常大 :
df
id V1 V2 V3 V4
1 01 1 1 1 1
2 02 2 1 1 1
3 03 3 1 1 1
4 04 4 1 2 2
我试图使用
fill
来自
tidyr
但在行级别我遇到了问题。我看过一些帖子,它与
dplyr
一起使用功能
across
但我找不到它。我试过使用
group_by(id)
和
rowwise
但我还没有成功。也只有以
V
开头的变量/列应该填充以前的值。
#Data
df <- structure(list(id = c("01", "02", "03", "04"), V1 = c(1, 2, 3,
4), V2 = c(1, 1, 1, 1), V3 = c(1, NA, NA, 2), V4 = c(NA, NA,
NA, NA)), class = "data.frame", row.names = c(NA, -4L))
非常感谢您的时间。
最佳答案
一种解决方案可能是使用 na.locf
包中的函数 zoo
结合pmap
行操作中的函数。 na.locf
取最近的非 NA
值并替换所有即将到来的 NA
值。提醒一下 c(...)
在这两种解决方案中都捕获了 V1:V4
的所有值在每次迭代的每一行中。但是,我排除了 id
列在两者中,因为它不参与我们的计算。
library(zoo)
library(purrr)
df %>%
mutate(pmap_df(., ~ na.locf(c(...)[-1])))
id V1 V2 V3 V4
1 01 1 1 1 1
2 02 2 1 1 1
3 03 3 1 1 1
4 04 4 1 2 2
或者我们可以使用
coalesce
函数来自
dplyr
.我们可以更换每个
NA
每行中最后一个非
NA
的值值,我们之前用
na.locf
做的事情.但是这个解决方案有点冗长:
df %>%
mutate(pmap_df(., ~ {x <- c(...)[!is.na(c(...))];
coalesce(c(...), x[length(x)])}))
id V1 V2 V3 V4
1 01 1 1 1 1
2 02 2 1 1 1
3 03 3 1 1 1
4 04 4 1 2 2
或者你也可以使用这个:
library(purrr)
df %>%
mutate(across(!id, ~ replace(., is.na(.), invoke(coalesce, rev(df[-1])))))
id V1 V2 V3 V4
1 01 1 1 1 1
2 02 2 1 1 1
3 03 3 1 1 1
4 04 4 1 2 2
可以忽略警告消息。它实际上是因为我们有 6
NA
而产生的。值但应用的结果
coalesce
每个向量上有 1 个元素,导致 4 个元素替换 6 个插槽。
关于r - 使用 dplyr 按行用以前的值填充缺失值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68003356/
我是 firebase 的新手,我正在尝试分页查询。我喜欢有一个“下一个”和“上一个”按钮。我的下一个按钮工作正常,我的问题是单击上一个 引用:https://firebase.google.com/
抱歉,标题这么蹩脚,但我只是不知道该放什么,希望你能理解。另外,我不知道以前是否有人问过类似的问题,因为我不知道合适的关键字 - 因此也无法用谷歌搜索。 基本上...在查看preg_match_all
我想在 TFS 中 check out 一个检入文件的先前版本。我可以轻松获得特定文件的变更集 ID 列表,但无法弄清楚如何 checkout 以前的版本。 我目前的代码: var workspace
我想使用 @FunctionalInterface来 self 代码中的 Java 8,但我希望能够将生成的类文件与 Java 6 一起使用。我认为我应该将源版本设为 1.8 , 目标版本为 1.6
自从 versions 被删除以来,我一直无法找到安装以前版本软件的方法。命令并点击 Homebrew。我在 2008 Mac Pro (3,1) 上运行 macOS 10.14.3 (Mojave)
当我开始当前的项目时,App Store 中已经有一个应用程序。此应用程序仅适用于 iPhone。 我的第一个任务是测试和构建一个也可以在 iPod Touch 上运行的版本。 大约 3 周前,App
我在 GitHub 上有一个曾经是 fork 的 repo,但现在不是了,因为我已经删除了原始项目的任何痕迹并开始了一个同名的新项目。 但是,GitHub 仍然表示该项目是 fork 的。有什么方法可
我是一名优秀的程序员,十分优秀!