R 基于对称性的NAs实现
假设您有一个类似于下面矩阵M的大型数据集:R 基于对称性的NAs实现,r,dplyr,data.table,transformation,R,Dplyr,Data.table,Transformation,假设您有一个类似于下面矩阵M的大型数据集: M <- data.frame(code = c("001", "001", "002", "002", "003", "003"), decr = c("x", NA, "y", "y", NA, "z")) # M # code decr # 1 001 x # 2 001 <NA> # 3 002 y # 4 002 y # 5 003 <NA>
M <- data.frame(code = c("001", "001", "002", "002", "003", "003"),
decr = c("x", NA, "y", "y", NA, "z"))
# M
# code decr
# 1 001 x
# 2 001 <NA>
# 3 002 y
# 4 002 y
# 5 003 <NA>
# 6 003 z
如何才能以最佳方式进行此转换
library(tidyverse)
M <- data.frame(code = c("001", "001", "002", "002", "003", "003"),
decr = c("x", NA, "y", "y", NA, "z"))
M %>% group_by(code) %>% mutate (decr=unique(na.omit(decr)))
这与@Sotos answer和dupe中的类似,但它不假定缺失值的特定位置
这与@Sotos answer和dupe中的类似,但它不会假定缺失值的特定位置。请尝试librarytidyverse;M%>%group_bycode%>%filldecr%>%filldecr,.direction='up'尝试librarytidyverse;M%>%group_字节码%>%filldecr%>%filldecr,.direction='up'不错。你应该把这个答案也加到被骗的人身上!我得到了类似的结果:M%>%group\u bycode%>%mutatedecr=if\u elseis.nadecr,uniquena.ommitedecr,decr。但是我现在看到,如果你只是覆盖整个组,那么NA检查就过时了。我想这只有在两者之间有1:1的关系时才会起作用columns@docendodiscimus是的,必须是一对一。如果不是,则填充方法更有意义-假设良好值始终高于或低于NA'sJust checked,dupe和此答案将不起作用-组和值之间没有一一对应的关系。很好。你应该把这个答案也加到被骗的人身上!我得到了类似的结果:M%>%group\u bycode%>%mutatedecr=if\u elseis.nadecr,uniquena.ommitedecr,decr。但是我现在看到,如果你只是覆盖整个组,那么NA检查就过时了。我想这只有在两者之间有1:1的关系时才会起作用columns@docendodiscimus是的,必须是一对一。如果不是,则填充方法更有意义——假设良好值始终高于或低于NA'sJust checked,dupe和此答案将不起作用——组和值之间不存在一一对应的关系。
library(tidyverse)
M <- data.frame(code = c("001", "001", "002", "002", "003", "003"),
decr = c("x", NA, "y", "y", NA, "z"))
M %>% group_by(code) %>% mutate (decr=unique(na.omit(decr)))