在 R 中重塑数据框
Remodelling a dataframe in R
我正在尝试将我的数据重塑为以下形状(从左侧形状到右侧形状):
下面是可重现的初始数据帧:
df <- data.frame(tag=c("tech","tech","tech","tech","distribution","fooddrinks","industry","conseil","tech","tech","conseil","fooddrinks","tech","conseil","conseil","conseil","conseil"),
company_name=c("360Learning","365Talents","3DS OUTSCALE","4D SAS","77 Foods","77 Foods","77 Foods","8pourcent","8SEC","Compte Pour Moi","Compte Pour Moi","AB InBev Europe","AB Tasty","AB Tasty","ABBD","Abbeal","ABC arbitrage"),
company_link=c("/fr/companies/360learning", "/fr/companies/365talents", "/fr/companies/3dsoutscale", "/fr/companies/4d", "/fr/companies/77-foods", "/fr/companies/77-foods", "/fr/companies/77-foods", "/fr/companies/8pourcent", "/fr/companies/8sec", "/fr/companies/ca-compte-pour-moi", "/fr/companies/ca-compte-pour-moi", "/fr/companies/abinbev",
"/fr/companies/ab-tasty", "/fr/companies/ab-tasty", "/fr/companies/abbd", "/fr/companies/abbeal", "/fr/companies/abc-arbitrage"))
我尝试了以下功能:stats::reshape
、data.table::dcast
、tidyr::spread
,但我无法找出正确的使用方法,也不知道它们是否正确。
您并不是真的要重塑(那将是根据行的内容添加列),在这里您只想 summarize
每个 company
的 tag
值.这样可以使用 dplyr
:
轻松完成
library(dplyr)
df %>%
group_by(company_name, company_link) %>%
summarize(tag = paste(tag, collapse = ", "))
使用data.table
时,您还可以通过以下方式解决您的问题:
library(data.table)
setDT(df)[, .(tag = toString(tag), company_link = company_link[1]), by = company_name]
# company_name tag company_link
# 1: 360Learning tech /fr/companies/360learning
# 2: 365Talents tech /fr/companies/365talents
# 3: 3DS OUTSCALE tech /fr/companies/3dsoutscale
# 4: 4D SAS tech /fr/companies/4d
# 5: 77 Foods distribution, fooddrinks, industry /fr/companies/77-foods
# 6: 8pourcent conseil /fr/companies/8pourcent
# 7: 8SEC tech /fr/companies/8sec
# 8: Compte Pour Moi tech, conseil /fr/companies/ca-compte-pour-moi
# 9: AB InBev Europe fooddrinks /fr/companies/abinbev
# 10: AB Tasty tech, conseil /fr/companies/ab-tasty
# 11: ABBD conseil /fr/companies/abbd
# 12: Abbeal conseil /fr/companies/abbeal
# 13: ABC arbitrage conseil /fr/companies/abc-arbitrage
我正在尝试将我的数据重塑为以下形状(从左侧形状到右侧形状):
下面是可重现的初始数据帧:
df <- data.frame(tag=c("tech","tech","tech","tech","distribution","fooddrinks","industry","conseil","tech","tech","conseil","fooddrinks","tech","conseil","conseil","conseil","conseil"),
company_name=c("360Learning","365Talents","3DS OUTSCALE","4D SAS","77 Foods","77 Foods","77 Foods","8pourcent","8SEC","Compte Pour Moi","Compte Pour Moi","AB InBev Europe","AB Tasty","AB Tasty","ABBD","Abbeal","ABC arbitrage"),
company_link=c("/fr/companies/360learning", "/fr/companies/365talents", "/fr/companies/3dsoutscale", "/fr/companies/4d", "/fr/companies/77-foods", "/fr/companies/77-foods", "/fr/companies/77-foods", "/fr/companies/8pourcent", "/fr/companies/8sec", "/fr/companies/ca-compte-pour-moi", "/fr/companies/ca-compte-pour-moi", "/fr/companies/abinbev",
"/fr/companies/ab-tasty", "/fr/companies/ab-tasty", "/fr/companies/abbd", "/fr/companies/abbeal", "/fr/companies/abc-arbitrage"))
我尝试了以下功能:stats::reshape
、data.table::dcast
、tidyr::spread
,但我无法找出正确的使用方法,也不知道它们是否正确。
您并不是真的要重塑(那将是根据行的内容添加列),在这里您只想 summarize
每个 company
的 tag
值.这样可以使用 dplyr
:
library(dplyr)
df %>%
group_by(company_name, company_link) %>%
summarize(tag = paste(tag, collapse = ", "))
使用data.table
时,您还可以通过以下方式解决您的问题:
library(data.table)
setDT(df)[, .(tag = toString(tag), company_link = company_link[1]), by = company_name]
# company_name tag company_link
# 1: 360Learning tech /fr/companies/360learning
# 2: 365Talents tech /fr/companies/365talents
# 3: 3DS OUTSCALE tech /fr/companies/3dsoutscale
# 4: 4D SAS tech /fr/companies/4d
# 5: 77 Foods distribution, fooddrinks, industry /fr/companies/77-foods
# 6: 8pourcent conseil /fr/companies/8pourcent
# 7: 8SEC tech /fr/companies/8sec
# 8: Compte Pour Moi tech, conseil /fr/companies/ca-compte-pour-moi
# 9: AB InBev Europe fooddrinks /fr/companies/abinbev
# 10: AB Tasty tech, conseil /fr/companies/ab-tasty
# 11: ABBD conseil /fr/companies/abbd
# 12: Abbeal conseil /fr/companies/abbeal
# 13: ABC arbitrage conseil /fr/companies/abc-arbitrage