R 转换数据框并删除 NA
R Transform Data Frame and Remove NAs
我已经将 R 中的数据集从 LONG 格式转换为 WIDE 格式,现在每行有一个测量值。合并基于 "Date" 列的行并删除 NA 的最佳方法是什么?
这是我所拥有的示例:
Date M1 M2 M3 M4
1 2013 NA NA NA 2
2 2013 6 NA NA NA
3 2013 NA 19 NA NA
4 2013 NA NA 10 NA
5 2014 NA NA NA 1
6 2014 NA NA 231 NA
7 2014 NA 215 NA NA
8 2014 16 NA NA NA
这就是我想要创建的:
Date M1 M2 M3 M4
1 2013 6 19 10 2
2 2014 16 215 231 1
如有任何建议或帮助,我们将不胜感激!
如果每行有一个测量值:
result<-aggregate(cbind(M1=data$M1, M2=data$M2, M3=data$M3, M4=data$M4),
by=list(Date= data$Date), FUN=sum, na.rm=TRUE)
编辑
正如 Ananda 在评论中提到的那样更好:
aggregate(. ~ Date, mydf, sum, na.rm = TRUE, na.action = "na.pass")
在不了解你的数据集的情况下,你可以尝试这样的事情:
library(data.table)
as.data.table(mydf)[, lapply(.SD, sum, na.rm = TRUE), by = Date]
# Date M1 M2 M3 M4
# 1: 2013 6 19 10 2
# 2: 2014 16 215 231 1
它不一定要使用 "data.table"(但这将是您最快的选择之一),但可以是您最喜欢的聚合函数之一。
使用dplyr
library(dplyr)
df1%>%
group_by(Date) %>%
summarise_each(funs(sum(., na.rm=TRUE)))
# Date M1 M2 M3 M4
#1 2013 6 19 10 2
#2 2014 16 215 231 1
如果每个 'Date' 的每一列只有一个非 NA 观察,您可以将 summarise_each
步骤替换为 summarise_each(funs(na.omit(.)))
我已经将 R 中的数据集从 LONG 格式转换为 WIDE 格式,现在每行有一个测量值。合并基于 "Date" 列的行并删除 NA 的最佳方法是什么?
这是我所拥有的示例:
Date M1 M2 M3 M4
1 2013 NA NA NA 2
2 2013 6 NA NA NA
3 2013 NA 19 NA NA
4 2013 NA NA 10 NA
5 2014 NA NA NA 1
6 2014 NA NA 231 NA
7 2014 NA 215 NA NA
8 2014 16 NA NA NA
这就是我想要创建的:
Date M1 M2 M3 M4
1 2013 6 19 10 2
2 2014 16 215 231 1
如有任何建议或帮助,我们将不胜感激!
如果每行有一个测量值:
result<-aggregate(cbind(M1=data$M1, M2=data$M2, M3=data$M3, M4=data$M4),
by=list(Date= data$Date), FUN=sum, na.rm=TRUE)
编辑 正如 Ananda 在评论中提到的那样更好:
aggregate(. ~ Date, mydf, sum, na.rm = TRUE, na.action = "na.pass")
在不了解你的数据集的情况下,你可以尝试这样的事情:
library(data.table)
as.data.table(mydf)[, lapply(.SD, sum, na.rm = TRUE), by = Date]
# Date M1 M2 M3 M4
# 1: 2013 6 19 10 2
# 2: 2014 16 215 231 1
它不一定要使用 "data.table"(但这将是您最快的选择之一),但可以是您最喜欢的聚合函数之一。
使用dplyr
library(dplyr)
df1%>%
group_by(Date) %>%
summarise_each(funs(sum(., na.rm=TRUE)))
# Date M1 M2 M3 M4
#1 2013 6 19 10 2
#2 2014 16 215 231 1
如果每个 'Date' 的每一列只有一个非 NA 观察,您可以将 summarise_each
步骤替换为 summarise_each(funs(na.omit(.)))