dplyr-填充独特的价值

时间:2019-11-14 17:07:29

标签: r dplyr

一个非常基本的问题,但是我想知道在数据组标识符定义唯一值和/或缺失的数据集中,您如何使用dplyr来感觉到具有唯一值的缺失?如果它是数字列,我会做类似的事情:

data %>% 
  group_by(groupIDs) %>% 
  mutate(VARwithNA=max(VARwithNA, na.rm=TRUE)

但是如果它是字符列怎么办?有一个更好的方法吗?谢谢!

2 个答案:

答案 0 :(得分:1)

使用unique将提取(唯一)唯一值并保留其类型。以下解决方案的优点是,它适用于大多数数据类型(数字,字符,逻辑,日期,时间等)。

data %>% 
  group_by(groupIDs) %>% 
  mutate(VARwithNA=unique(na.omit(VARwithNA)))

请注意,如果没有可用(即非NA)值,则此操作将失败,并显示“替换长度为0”。

答案 1 :(得分:1)

unique值的长度可能与每个组的行数不匹配。使用可复制的示例

data(mtcars)
mtcars$carb[c(5, 6, 10, 31)] <- NA
mtcars %>% 
   group_by(am) %>%
   mutate(carb = unique(carb[!is.na(carb)]))
  

错误:列carb的长度必须为19(组大小)或1,而不是4


在这种情况下,最好将它们粘贴为单个字符串

library(dplyr)
data %>% 
   group_by(groupIDs) %>% 
   mutate(VARwithNA = toString(unique(VARwithNA[!is.na(VARwithNA)])))

或保留为list

data %>% 
   group_by(groupIDs) %>% 
   mutate(VARwithNA = list(unique(VARwithNA[!is.na(VARwithNA)])))