r - 将一行数据框中的 NA 替换为其他数据框中的值
问题描述
我想用另一行的值替换一行中的 NA,示例数据是:
group <-c('A','A_old')
year1<- c(NA,'20')
year2<- c(NA,'40')
year3<- c('20','230')
datac=data_frame(group,year1,year2,year3)
group <-c('A','A_old')
year1<- c('20','20')
year2<- c('40','40')
year3<- c('20','230')
finaldatac=data_frame(group,year1,year2,year3)
原始表要大得多,因此无法一一引用每个元素并分配值。
谢谢!
为了下面的论点,我需要用它们的名字来引用行值,因为原始表很大,我不能只玩两行。例如在下表中,我想将第 1 行(组==A)替换为第 5 行(组==E)。数据在这里:
group <-c('A','B','C','D','E','F','G')
year1<- c(NA,'100',NA,'200','300',NA,NA)
year2<- c(NA,'100',NA,'200','300','50','40')
year3<- c('20','100',10,'200','300','150','230')
data=data.frame(group,year1,year2,year3)
所以我想得到:
group <-c('A','B','C','D','E','F','G')
year1<- c('300','100',NA,'200','300',NA,NA)
year2<- c('300','100',NA,'200','300','50','40')
year3<- c('20','100',10,'200','300','150','230')
data=data.frame(group,year1,year2,year3)
解决方案
除了使用fill
or na.locf
,您还可以执行以下操作:
datac %>%
group_by(grp = gsub("_.*", "", group)) %>%
mutate_at(vars(contains("year")),
funs(.[!is.na(.)])) %>%
ungroup() %>% select(-grp)
输出:
# A tibble: 2 x 4
group year1 year2 year3
<chr> <chr> <chr> <chr>
1 A 20 40 20
2 A_old 20 40 230
对于您的第二个示例,您可以执行以下操作:
data %>%
mutate_at(
vars(contains("year")),
funs(
case_when(
group == "A" & is.na(.) ~ .[group == "E"],
TRUE ~ .)
)
)
输出:
group year1 year2 year3
1 A 300 300 20
2 B 100 100 100
3 C <NA> <NA> 10
4 D 200 200 200
5 E 300 300 300
6 F <NA> 50 150
7 G <NA> 40 230
您还可以将其他条件添加到case_when
.
例如,如果您还想C
用 group 的内容替换 years D
,您可以添加:
data %>%
mutate_at(
vars(contains("year")),
funs(
case_when(
group == "A" & is.na(.) ~ .[group == "E"],
group == "C" & is.na(.) ~ .[group == "D"],
TRUE ~ .)
)
)
推荐阅读
- java - 面临将片段转换为活动
- bash - bash 中的“-s”选项是什么?
- swiper - 当我添加一个以上的滑动元素时的奇怪行为
- javascript - 使用 vs 代码扩展进行调试时 test.js 中的 ES6 导入/导出失败并显示“SyntaxError:无法在模块外使用导入语句”
- firebase - Firebase 部署错误:必须在每个“托管”配置中使用“公共”提供公共目录
- react-native - React Native + React Navigation v5 - 在两个堆栈之间发送参数适用于模拟器,但不适用于真实设备
- javascript - 执行复制后从 arr 中删除特定键
- c++ - 错误:(E112)获取接口失败:端口未绑定:端口'server.outgoin1'(sc_out)
- python - Django 克隆递归对象
- javascript - getItem 时出现 aws DynamoDB 问题