R 按ID显示一行上的数据
我有一个数据框,其中有一个id列和几个其他列,它们按对分组,我试图将同一id的所有数据放在一行上。ID的每次出现次数不相同 我的数据如下所示:R 按ID显示一行上的数据,r,R,我有一个数据框,其中有一个id列和几个其他列,它们按对分组,我试图将同一id的所有数据放在一行上。ID的每次出现次数不相同 我的数据如下所示: df <- data.frame(id=sample(1:4, 12, T), vpcc1=1:12, hpcc1=rnorm(12), vpcc2=1:12, hpcc2=rnorm(12), vpcc3=1:12, hpcc3=rnorm(12)) df ## id vpcc1 hpcc1 vpcc2 hpcc2
df <- data.frame(id=sample(1:4, 12, T), vpcc1=1:12, hpcc1=rnorm(12), vpcc2=1:12, hpcc2=rnorm(12), vpcc3=1:12, hpcc3=rnorm(12))
df
## id vpcc1 hpcc1 vpcc2 hpcc2 vpcc3 hpcc3
## 1 1 1 0.04632267 1 -0.37404379 1 0.90711353
## 2 4 2 0.50383152 2 0.06075954 2 0.30690284
## 3 1 3 1.52450117 3 -1.21539925 3 -1.12411614
## 4 1 4 -0.50624871 4 -0.75988364 4 -0.47970608
## 5 3 5 1.64610863 5 0.03445275 5 -0.18895338
## 6 1 6 0.22019099 6 -0.32101883 6 1.29375822
## 7 2 7 -0.10041807 7 -0.17351799 7 -0.03767921
## 8 2 8 0.81683565 8 0.62449158 8 0.50474787
## 9 2 9 -0.46891269 9 1.07743469 9 -0.55539149
## 10 1 10 0.69736549 10 -0.08573679 10 0.28025325
## 11 3 11 0.73354215 11 0.80676315 11 -1.12561358
## 12 2 12 -0.40903143 12 1.94155313 12 0.64231119
df当您说“同一行”时,是否有必要将输出与您的尝试中的输出相同,或者您是否对以下内容感到满意:
x <- aggregate(df[2:ncol(df)],list(df$id),list)
并使用列表表示法引用vpcc和hpcc的不同值:
x$vpcc1
#$`0`
#[1] 9 10
#$`1`
#[1] 1 3 7
#$`2`
#[1] 5 6
#$`3`
#[1] 2 4 8 11 12
x$vpcc1[[1]]
#[1] 9 10
?在您的示例中,变量vpcc1
vpcc2
等是冗余的,因为它们都具有相同的值。因此,您可以将数据集转换为更经济的结构:
df <- data.frame(id=sample(1:4, 12, T), vpcc=1:12, hpcc1=rnorm(12),
hpcc2=rnorm(12),hpcc3=rnorm(12))
编辑:
如果vpccX
发生变化,那么这可能会满足您的需要
df <- data.frame(id=sample(1:4, 12, T), vpcc1=1:12, hpcc1=rnorm(12), vpcc2=1:12,
hpcc2=rnorm(12), vpcc3=1:12, hpcc3=rnorm(12))
df$time = ave(df$id, df$id, FUN = function(x) 1:length(x))
reshape(df, idvar = "id", direction = "wide", timevar = "time")
df-Thx用于应答,no用于real-vpccX没有相同的值,它们是date,但我将尝试使用索引。好的,这不清楚。检查我的更新建议,也许它对你有用。我希望输出结果与我尝试的一样,但我会看看你的解决方案。谢谢!
df <- data.frame(id=sample(1:4, 12, T), vpcc=1:12, hpcc1=rnorm(12),
hpcc2=rnorm(12),hpcc3=rnorm(12))
reshape(df, idvar = "id", direction = "wide", timevar = "vpcc")
df <- data.frame(id=sample(1:4, 12, T), vpcc1=1:12, hpcc1=rnorm(12), vpcc2=1:12,
hpcc2=rnorm(12), vpcc3=1:12, hpcc3=rnorm(12))
df$time = ave(df$id, df$id, FUN = function(x) 1:length(x))
reshape(df, idvar = "id", direction = "wide", timevar = "time")