【发布时间】:2019-05-24 00:42:31
【问题描述】:
我有一个包含四列的大型数据集:问题、id、国家和响应。在 id 列中,我有几个重复项。这是因为它们指的是同一个问题,但是在其中一个重复项具有值而另一个是 NA 的意义上,响应是不同的。现在我想删除重复项并保留响应列具有值的那些行。请注意,我的数据库中的值是数字或字符。
我尝试使用 dplyr 包中的distinct()。但是,问题在于它总是删除第一行/第一个重复项,无论响应列中的内容是什么。
这是我的代码:
df1 %>% distinct(id, country, .keep_all = TRUE)
我期望的输出是我留下了唯一的 id 行(没有重复),并且在响应列中没有信息丢失。请参见下面的示例:
#Initial data frame
df1 <- read.table(text="question id country response
X1 10 Belgium 40
X2 12 Austria NA
X2_1 12 Austria NEW
X4 17 USA NA
X5 17 USA 5
X6 NA Italy 61
X7 15 Spain
X8 15 Spain 100", header=TRUE, stringsAsFactors=FALSE)`
#Expected Output
df1 <- read.table(text="question id country response
X1 10 Belgium 40
X2_1 12 Austria NEW
X5 17 USA 5
X6 NA Italy 61
X8 15 Spain 100", header=TRUE, stringsAsFactors=FALSE)`
【问题讨论】:
-
要么 (a) 对数据进行排序(大多数排序会将 NA 放在最后,因此它们将省略重复项)或 (b) 仅省略 NA,
na.omit(df1) -
删除
response中的NA行?df1[!is.na(df1$response), ]
标签: r