ID = c(1,1,1,2,2,2,3,3,3,4,4,4,4)
VAR_1 = c(2,4,6,1,7,9,4,4,3,1,7,4,0)
VAR_2 = c(NA,NA,NA,NA,NA,20190101,20190101,20190101,NA,20190101,NA,NA,NA)
df2 = data.frame(ID,VAR_1,VAR_2)
df df_subset
ID VAR_1 VAR_2 ID VAR_1 VAR_2
1 2 NA 3 4 20190101
1 4 NA 3 4 20190101
1 6 NA 3 3 NA
2 1 NA 4 1 20190101
2 7 NA 4 7 NA
2 9 20190101 4 4 NA
3 4 20190101 4 0 NA
3 4 20190101
3 3 NA
4 1 20190101
4 7 NA
4 4 NA
4 0 NA
我通过几个步骤完成了这一过程(我对原始数据进行了子集,只按组进行第一次观察,给VAR_1赋一个特殊值,重新合并,然后最后按特殊值进行过滤),但我想知道是否有更简单、更优雅(可能也是)更有效的方法。我不需要VAR_1,所以如果需要,可以更改VAR_1,以提供更快的解决方案。
如有任何帮助,不胜感激。
使用dplyr
,我们可以group_by
ID
,并且仅当每个组中的第一个值是非na时才选择组。
library(dplyr)
df2 %>%
group_by(ID) %>%
filter(!is.na(VAR_2[1L]))
# ID VAR_1 VAR_2
# <dbl> <dbl> <dbl>
#1 3 4 20190101
#2 3 4 20190101
#3 3 3 NA
#4 4 1 20190101
#5 4 7 NA
#6 4 4 NA
#7 4 0 NA
提取第一个值的一些变体可以是(感谢@tmfmnk)
df2 %>% group_by(ID) %>% filter(!is.na(first(VAR_2)))
或
df2 %>% group_by(ID) %>% filter(!is.na(nth(VAR_2, 1)))
df2[with(df2, ave(!is.na(VAR_2), ID, FUN = function(x) x[1L])), ]
subset(df2, ID %in% names(na.omit(sapply(split(df2$VAR_2, df2$ID), head, 1))))
问题内容: 根据MDN 文档: 该 方法冻结对象:即,防止向其添加新属性;防止现有属性被删除;并防止更改现有属性或其可枚举性,可配置性或可写性。本质上,对象实际上是不可变的。该方法返回被冻结的对象。 我期望在某个日期调用冻结会阻止对该日期进行更改,但是它似乎没有用。这是我正在做的(运行Node.js v5.3.0): 我本以为调用会失败或什么都不做。任何想法如何冻结日期? 问题答案: 有没有办法O
我有一个关于接口的问题,比如: 现在,我需要这只猫去抓一只老鼠void catchMouse(){std::cout 有几种可能的解决方案,但看起来都不好。 > 在IAnim中添加一个方法,然后使用AnimalFactory创建猫后,我可以从IAnimal调用catchMouse()方法。但是catchMouse并不适用于所有动物,狗不catchMouse。将方法添加到IEM会污染界面,嗅到代码。
我有一个需求,我想找到运行的jar中的jar的路径。假设有一个名为example-1.0.0.jar的罐子在一个名为main-1.0.0.jar.的运行罐子里,我想知道运行罐子里存在的罐子的路径。 编辑1:例如,jar是项目中的一个依赖项。例如,假设我的项目中有一个log4j依赖项,我想知道log4j jar在类中的路径。我怎样才能找到路?
问题内容: 我不断收到错误: “路由器”可能只有一个子元素 使用react-router时。 我似乎无法弄清楚为什么它不起作用,因为它与示例中显示的代码完全一样:快速入门 这是我的代码: 感谢您的帮助 问题答案: 您必须将您的换行到(或)中。 应该 jsfiddle / webpackbin
问题内容: 我对这种函数式编程和流技术有点陌生,但是我所知道的一点却非常有用! 我遇到过几次这种情况: 我真正想要的是: 我认为,除了与结合使用外,该东西在其他情况下也可能有用。当我成为超级n00b时,我花了很多时间重新发明Java Collections Framework,因为我不知道它在那里,所以我试图不重蹈覆辙。Java是否提供了执行此操作的好方法?我说错了吗? 谢谢! 编辑:这是案例的一
我使用的界面看起来大致如下: 并且我目前正在使用一个匿名类来实现接口,但我并不关心这两种方法中的一种。大致如下: 现在,我已经在Java8中尽可能地使用新的lambda表达式,我想在这种情况下使用增加的简单性。毕竟,我只是在实现其中的一个方法,但由于接口中有两个方法,所以我不能在一个lambda表达式中使用它。