r - 用 R 中的最大行替换 nan 值
问题描述
我有以下数据框(df):
PARTY_ID O1 O2 O3 O4
P1 20 NA NA NA
P2 3 18 NA NA
我需要用每行的最大值替换 NA 值。我想要的输出是:
PARTY_ID O1 O2 O3 O4
P1 20 20 20 20
P2 3 18 18 18
我需要快速执行此操作,因为我的数据有 600K 行。任何人都可以帮助我吗?
解决方案
tidyverse
使用&reshape2
包可以有多个选项。
选项#1:您可以转换长格式的数据并对其进行处理。最后使用dcast
.
library(tidyverse)
library(reshape2)
df %>% gather(Key, Value, -PARTY_ID) %>%
group_by(PARTY_ID) %>%
mutate(Value = ifelse(is.na(Value), max(Value, na.rm = TRUE), Value)) %>%
dcast(PARTY_ID~Key, value.var = "Value")
# PARTY_ID O1 O2 O3 O4
# 1 P1 20 20 20 20
# 2 P2 3 18 18 18
选项#2: OP 提到她600K
在 data.frame 中有大量行 ()。因此,另一种选择是处理宽格式本身的数据。dplyr::mutate_at
在这种情况下会有很大帮助。我会更喜欢这个选项。
library(dplyr)
df %>% mutate(RowMax = apply(select(.,starts_with("O")), 1, FUN=max, na.rm=TRUE)) %>%
mutate_at(vars(starts_with("O")), funs(ifelse(is.na(.), RowMax,.))) %>%
select(-RowMax)
# PARTY_ID O1 O2 O3 O4
# 1 P1 20 20 20 20
# 2 P2 3 18 18 18
数据:
df <- read.table(text =
"PARTY_ID O1 O2 O3 O4
P1 20 NA NA NA
P2 3 18 NA NA",
header = TRUE, stringsAsFactors = FALSE)
推荐阅读
- git - 如何构建相关的拉取请求
- html - 为什么这个 Instagram oEmbed html 不适合 Swift WKWebView?
- javascript - 搜索时隐藏元素
- 在一个里面
- 在一个里面
- python - print 函数中定义的变量有什么作用?
- javascript - 在 Safari 中获取 doNotTrack 设置
- vb.net - 查找列中重复的条目并用数字对其进行索引
- c++ - 从循环内向前移动基于范围的迭代器
- excel - Data Validation Character Limit Exceeded with Substitute Function
- python - 优化石头剪刀布(新手)
- c++ - SDI12 库不显示带有 + 或 - 登录的测量值