Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/drupal/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R将表格分成三列_R_Aggregate - Fatal编程技术网

R将表格分成三列

R将表格分成三列,r,aggregate,R,Aggregate,希望我能很好地解释我的问题; 所以,我有一个这样的数据框: sample = data.frame("Room" = c("A1", "B2","A1","A3","A2"), "Name"=c("Peter","Tom","Peter","Anna","Peter"), "Class"=c("E","E","F","D","E"), "FY"=c(1,2,3,4,6)) 现在我想创建一个新的数据框,它只有列“Class”的唯一值作为列名,列“Room”和“Name”作为列。然后,这些值应为“

希望我能很好地解释我的问题; 所以,我有一个这样的数据框:

sample = data.frame("Room" = c("A1", "B2","A1","A3","A2"), "Name"=c("Peter","Tom","Peter","Anna","Peter"), "Class"=c("E","E","F","D","E"), "FY"=c(1,2,3,4,6))
现在我想创建一个新的数据框,它只有列“Class”的唯一值作为列名,列“Room”和“Name”作为列。然后,这些值应为“FY”之和

如果没有“房间”一栏,我会这样做:

test=as.data.frame(unclass(with(sample, tapply(FY, list(Name, Class), FUN=sum))))
但是我怎么能用两列来做呢

这是我想要的输出:

output = data.frame(c("A1", "B2","A3", "A2"), c("Peter","Tom","Anna","Peter"), c(1,2,NA,6),c(3,NA,NA,NA),c(NA,NA,4,NA))
colnames(output) = c("Room", "Name","E","F","D")

在这个具体的例子中,我相信您可以通过以下方式逃脱:

library(tidyverse)

sample %>%
  spread(Class, FY)
然而,根据你的描述,我认为这应该涵盖一个更广泛的例子:

sample %>%
  group_by(Room, Name, Class) %>% 
  summarise(FY = sum(FY)) %>% 
  spread(Class, FY)

在这个具体的例子中,我相信您可以通过以下方式逃脱:

library(tidyverse)

sample %>%
  spread(Class, FY)
然而,根据你的描述,我认为这应该涵盖一个更广泛的例子:

sample %>%
  group_by(Room, Name, Class) %>% 
  summarise(FY = sum(FY)) %>% 
  spread(Class, FY)

一个简单的
dcast
restrape2
应该可以做到:

library(reshape2)
dcast(sample, Room + Name ~ Class, value.var = "FY")

#  Room  Name  D  E  F
#1   A1 Peter NA  1  3
#2   A2 Peter NA  6 NA
#3   A3  Anna  4 NA NA
#4   B2   Tom NA  2 NA

一个简单的
dcast
restrape2
应该可以做到:

library(reshape2)
dcast(sample, Room + Name ~ Class, value.var = "FY")

#  Room  Name  D  E  F
#1   A1 Peter NA  1  3
#2   A2 Peter NA  6 NA
#3   A3  Anna  4 NA NA
#4   B2   Tom NA  2 NA

使用
重塑

reshape(sample, idvar = c("Name", "Room"), timevar = "Class", direction = "wide")
输出:

    Room  Name FY.E FY.F FY.D
1   A1 Peter    1    3   NA
2   B2   Tom    2   NA   NA
4   A3  Anna   NA   NA    4
5   A2 Peter    6   NA   NA

如果需要,可以稍后更改列名。

使用
重塑

reshape(sample, idvar = c("Name", "Room"), timevar = "Class", direction = "wide")
输出:

    Room  Name FY.E FY.F FY.D
1   A1 Peter    1    3   NA
2   B2   Tom    2   NA   NA
4   A3  Anna   NA   NA    4
5   A2 Peter    6   NA   NA
如果需要,可以稍后更改列名