R 按名称折叠数据帧,其中整数列求和,因子列粘贴
我试图通过包含补充整数列和因子列的唯一名称来折叠数据帧。整数列需要求和以获得唯一的“Name”值,而factor列需要将所有值彼此并排粘贴,如下所示:R 按名称折叠数据帧,其中整数列求和,因子列粘贴,r,R,我试图通过包含补充整数列和因子列的唯一名称来折叠数据帧。整数列需要求和以获得唯一的“Name”值,而factor列需要将所有值彼此并排粘贴,如下所示: Name Number Location RUDU 6 SiteA RUDU 4 SiteB YHBL 50 SiteA YHBL 60
Name Number Location
RUDU 6 SiteA
RUDU 4 SiteB
YHBL 50 SiteA
YHBL 60 SiteB
按名称折叠为:
Name Number Location
RUDU 10 SiteA,SiteB
YHBL 110 SiteA,SiteB
我已经使用了ddplyr,它适用于整数部分,但是我不知道如何聚合我请求的因子部分。这里有一种可能的
数据表方法
library(data.table)
setDT(df)[, list(Mumber = sum(Number), Location = toString(Location)), by = Name]
# Name Mumber Location
# 1: RUDU 10 SiteA, SiteB
# 2: YHBL 110 SiteA, SiteB
正如您提到的,这里有一个可能的解决方案
library(dplyr)
df %>%
group_by(Name) %>%
summarise(
Mumber = sum(Number),
Location = toString(Location)
)
# Source: local data table [2 x 3]
#
# Name Mumber Location
# 1 RUDU 10 SiteA, SiteB
# 2 YHBL 110 SiteA, SiteB
dplyr
library(dplyr)
d %>%
group_by_(~Name) %>%
summarize_(Number=~sum(Number), Location=~paste(Location, collapse=','))
基本R
merge(aggregate(Number ~ Name, data=d, FUN=sum), aggregate(Location ~ Name, data=d, FUN=paste, collapse=','))
还有两种方法可供参考
功能:tapply()
函数:by()
数据
# df1 <- read.table(text='Name Number Location
# RUDU 6 SiteA
# RUDU 4 SiteB
# YHBL 50 SiteA
# YHBL 60 SiteB', header=T)
#df1我不确定代码会是什么样子,但要激发一个想法,请尝试将其分为两个过程。将数字相加并另存为变量,然后运行newDf加上一个toString
setDT(df)[,list(Number=sum(Number),Location=(Location)),by=Name]
。没有toString
@plafort的解决方案,它会将Location
转换为列表。我明白了。在大多数情况下,将其作为向量使用会更好。
data.frame(cbind(
Number = with(df1, by(Number, Name, sum)),
Location = with(df1, by(Location, Name, toString))
)
)
# Number Location
# RUDU 10 SiteA, SiteB
# YHBL 110 SiteA, SiteB
# df1 <- read.table(text='Name Number Location
# RUDU 6 SiteA
# RUDU 4 SiteB
# YHBL 50 SiteA
# YHBL 60 SiteB', header=T)