假设我有以下数据framedf
name <- c("Bill", "Rob", "Joe", "Joe")
address <- c("123 Main St", "234 Broad St", NA, "456 North Ave")
favteam <- c("Dodgers", "Mets", "Pirates", NA)
df <- data.frame(name = name,
address = address,
favteam = favteam)
df
name address favteam
1 Bill 123 Main St Dodgers
2 Rob 234 Broad St Mets
3 Joe <NA> Pirates
4 Joe 456 North Ave <NA>
我要做的是按名称(或一般情况下,任意数量的分组变量)折叠(合并)行,并使用na
以外的任何其他值替换最终数据中的na
值,如下所示:
df_collapse <- foo(df)
name address favteam
1 Bill 123 Main St Dodgers
2 Rob 234 Broad St Mets
3 Joe 456 North Ave Pirates
下面是DPLYR的一个选项:
library(dplyr)
df %>%
group_by(name) %>%
summarise_each(funs(first(.[!is.na(.)]))) # or summarise_each(funs(first(na.omit(.))))
#Source: local data frame [3 x 3]
#
# name address favteam
#1 Bill 123 Main St Dodgers
#2 Joe 456 North Ave Pirates
#3 Rob 234 Broad St Mets
和data.table:
library(data.table)
setDT(df)[, lapply(.SD, function(x) x[!is.na(x)][1L]), by = name]
# name address favteam
#1: Bill 123 Main St Dodgers
#2: Rob 234 Broad St Mets
#3: Joe 456 North Ave Pirates
或
setDT(df)[, lapply(.SD, function(x) head(na.omit(x), 1L)), by = name]
考虑这个修改过的示例数据(看最后一行):
name <- c("Bill", "Rob", "Joe", "Joe", "Joe")
address <- c("123 Main St", "234 Broad St", NA, "456 North Ave", "123 Boulevard")
favteam <- c("Dodgers", "Mets", "Pirates", NA, NA)
df <- data.frame(name = name,
address = address,
favteam = favteam)
df
# name address favteam
#1 Bill 123 Main St Dodgers
#2 Rob 234 Broad St Mets
#3 Joe <NA> Pirates
#4 Joe 456 North Ave <NA>
#5 Joe 123 Boulevard <NA>
然后,您可以使用这种data.table方法来获得数量因名称而不同的非NA响应:
setDT(df)[, lapply(.SD, function(x) unique(na.omit(x))), by = name]
# name address favteam
#1: Bill 123 Main St Dodgers
#2: Rob 234 Broad St Mets
#3: Joe 456 North Ave Pirates
#4: Joe 123 Boulevard Pirates
问题内容: 我有一个这样的 LoginTime 表: 我想删除的最后一条记录。用户的最后一条记录可以通过识别。 如何使用一个查询执行此操作。 问题答案: 您需要按user_id(例如WHERE user_id = 1)过滤表,然后按时间(例如ORDER BY datetime)对其进行排序,然后将查询限制为一项(例如LIMIT1),然后删除此查询的结果。最后,您将获得如下查询:
问题内容: 删除unt_uid为null的活动 这将是最快的方法,但是在该语句完成之前没有人可以访问数据库/表,因此这是不可行的。 我定义了一个游标以在工作时间内完成此任务,但无论如何对生产率的影响很大。那么如何删除这些记录,以保证该数据库的正常使用? 它是32位Win2003上的SQL-2005 Server。第二个问题是:您估计这项工作要完成多长时间(6个小时或60个小时)?(是的,我知道这取
我只是开始尝试做一个新的引导站点,并希望有搜索栏作为一个单独的折叠切换的一部分。基本上在navbar的右边,我想要搜索栏切换,然后菜单切换。 我有以下几个问题: 我怎样才能点亮这两个按钮,使它们在右侧相邻?其中一个似乎坐在中间,我不知道为什么。 由于我将表单分隔成一个不同的DIV,它似乎不再对齐页面的右侧,而是缩进了一些。为什么? 我一次只打开一个折叠菜单。例如。如果搜索是打开的,我点击菜单切换,
问题内容: 我想在7天后从我的MySQL数据库中删除一些消息。 我的消息表行具有以下格式:id | 留言| 日期 日期是标准格式的时间戳。2012-12-29 17:14:53 我当时以为MySQL事件将成为替代cron工作的方式。 我想对有经验的SQL人员来说,这是一个简单的问题,如何在下面的括号中编写删除消息部分的代码? 一个例子,将不胜感激,谢谢。 问题答案: 您可以尝试使用以下条件: 这样
问题内容: 我正在使用Spring JPA存储库将Twitter推文保存在数据库中。鸣叫的日期在MySQL数据库中另存为Datetime。现在,我想删除所有超过一年的推文。我看到有功能,想到了类似的东西。我知道那不是正确的语法,但是我不知道该怎么做。这是我所拥有的: 编辑已解决: 仓库: 服务: 问题答案: 为此,您需要2个步骤。首先,您需要一个方法,该方法将要删除消息的日期作为参数,并且根本不需
问题内容: 我有一个具有以下布局的表: 我想将表转换为如下所示的布局: 我在PostgreSQL中使用SQL。有没有一种简单的方法(且内存效率高)来做到这一点?我看过一些提到使用透视的帖子,但是我不确定这是否行得通,而且我看到的描述似乎是针对Oracle的。 问题答案: 如果尚未安装,请首先安装扩展tablefunc。每个数据库需要做一次。 你需要的PostgreSQL 9.1 的。在旧版本中,您