【发布时间】:2015-11-09 01:43:40
【问题描述】:
我有一个数据框:
Title Date year lai biomass grain_wt wet_yield
1 HartogSowN 2014-07-31 2014 4.4 NA NA NA
2 HartogMild 2014-07-31 2014 3.7 NA NA NA
3 HartogSevere 2014-07-31 2014 2.3 NA NA NA
4 HartogSowN 2014-08-12 2014 6.1 NA NA NA
5 HartogMild 2014-08-12 2014 6.6 NA NA NA
6 HartogSevere 2014-08-12 2014 3.8 NA NA NA
7 HartogSowN 2014-11-10 2014 NA 16116 NA NA
8 HartogMild 2014-11-10 2014 NA 18224 NA NA
9 HartogSevere 2014-11-10 2014 NA 18184 NA NA
10 HartogSowN 2014-11-10 2014 NA NA 0.041 NA
11 HartogMild 2014-11-10 2014 NA NA 0.040 NA
12 HartogSevere 2014-11-10 2014 NA NA 0.038 NA
13 HartogSowN 2014-08-12 2014 NA 4511 NA NA
14 HartogMild 2014-08-12 2014 NA 4525 NA NA
15 HartogSevere 2014-08-12 2014 NA 3167 NA NA
16 HartogSowN 2014-07-31 2014 NA 2837 NA NA
17 HartogMild 2014-07-31 2014 NA 2444 NA NA
18 HartogSevere 2014-07-31 2014 NA 1940 NA NA
19 HartogSowN 2014-11-10 2014 NA NA NA 8457.4
20 HartogMild 2014-11-10 2014 NA NA NA 8662.4
21 HartogSevere 2014-11-10 2014 NA NA NA 8537.8
22 HartogSowN 2014-11-10 2014 NA NA NA NA
23 HartogMild 2014-11-10 2014 NA NA NA NA
24 HartogSevere 2014-11-10 2014 NA NA NA NA
structure(list(Title = c("HartogSowN", "HartogMild", "HartogSevere",
"HartogSowN", "HartogMild", "HartogSevere", "HartogSowN",
"HartogMild", "HartogSevere", "HartogSowN", "HartogMild",
"HartogSevere", "HartogSowN", "HartogMild", "HartogSevere",
"HartogSowN", "HartogMild", "HartogSevere", "HartogSowN",
"HartogMild", "HartogSevere", "HartogSowN", "HartogMild",
"HartogSevere"), Date = structure(c(16282, 16282, 16282, 16294,
16294, 16294, 16384, 16384, 16384, 16384, 16384, 16384, 16294, 16294,
16294, 16282, 16282, 16282, 16384, 16384, 16384, 16384, 16384,
16384), class = "Date"), year = c(2014, 2014, 2014, 2014, 2014, 2014,
2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014,
2014, 2014, 2014, 2014, 2014, 2014, 2014), lai = c(4.4,
3.7, 2.3, 6.1, 6.6, 3.8, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA), biomass = c(NA, NA, NA, NA, NA, NA,
16116, 18224, 18184, NA, NA, NA, 4511, 4525, 3167, 2837, 2444, 1940,
NA, NA, NA, NA, NA, NA), grain_wt = c(NA, NA, NA, NA, NA, NA, NA, NA,
NA, 0.041, 0.04, 0.038, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA), wet_yield = c(NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, 8457.4,
8662.4, 8537.8, NA, NA, NA)), .Names = c("Title", "Date", "year", "lai", "biomass", "grain_wt", "wet_yield"), row.names = c(NA, 24L),
class = "data.frame")
我想折叠行,以便给定标题和日期组合的所有数据都在一行上,并删除了多余的行。我找到了类似问题的答案,但都涉及修改原始数据。
期望的输出:
Title Date year lai biomass grain_wt wet_yield
1 HartogSowN 2014-07-31 2014 4.4 2837 NA NA
2 HartogMild 2014-07-31 2014 3.7 2444 NA NA
3 HartogSevere 2014-07-31 2014 2.3 1940 NA NA
4 HartogSowN 2014-08-12 2014 6.1 4511 NA NA
5 HartogMild 2014-08-12 2014 6.6 4525 NA NA
6 HartogSevere 2014-08-12 2014 3.8 3167 NA NA
7 HartogSowN 2014-11-10 2014 NA 16116 0.041 8457.4
8 HartogMild 2014-11-10 2014 NA 18224 0.040 8662.4
9 HartogSevere 2014-11-10 2014 NA 18184 0.038 8537.8
22 HartogSowN 2014-11-10 2014 NA NA NA NA
23 HartogMild 2014-11-10 2014 NA NA NA NA
24 HartogSevere 2014-11-10 2014 NA NA NA NA
移除包含生物量、grain_wt 和 wet_yield 的额外行。
更新:谢谢帕斯卡,是的,日子应该匹配,我的错误。我已经更新了想要的结果。
更新 2:为清楚起见添加了所需的完整输出。
【问题讨论】:
-
你确定要那个输出吗?其中一些值来自不同的日期,不是吗?
lai的4.4用于HartogSowN/2014-07-31而所有其他值用于HartogSowN/2014-11-10 -
我认为你最好展示你想要的全部输出。这对我来说并不明显。特别是,您的示例对我来说毫无意义,基于
subset(DF, Title=="HartogSowN" & Date=="2014-07-31") -
在不清楚自己想要什么的情况下,
aggregate(. ~ Title + Date + year, data=df, FUN=function(x) x[!is.na(x)][1], na.action=na.pass)会做到吗? -
@thelatemail 是的,谢谢,那行得通。添加它作为答案,我会选择它。您介意添加几句话作为解释吗?我以前没有使用过聚合。
标签: r