将单行数据拆分为多行数据

3
我有一组包含3k个作者的合作数据。我有两列分别为发送方接收方(或目标),还有一列期刊名称出版年份。如果某些作者有多篇共同文章,则结果将在一行中以逗号分隔。我想要做的是将这些行拆分成多行。data.frame - 我的GitHub存储库 例如:
HALL M,DE JONG GF, "['GRAEFE DR 2008 INTERNATIONAL MIGRATION REVIEW', 'HALL M 2010 SOCIAL SCIENCE RESEARCH']"

我需要按照以下方式拆分最后一列:

HALL M,DE JONG GF, GRAEFE DR 2008 INTERNATIONAL MIGRATION REVIEW
HALL M,DE JONG GF, HALL M 2010 SOCIAL SCIENCE RESEARCH

我听说我需要在R中编写一个简单的循环,但我不知道它应该长什么样子。

编辑 我的数据的dput,前20行:

> dput(head(temp,n=20))
structure(list(Source = c("HUMPHREY CR", "HUMPHREY CR", "HUMPHREY CR", 
"SELL RR", "SELL RR", "SELL RR", "GARDNER RW", "GARDNER RW", 
"GARDNER RW", "GARDNER RW", "GARDNER RW", "GARDNER RW", "GARDNER RW", 
"GARDNER RW", "FAWCETT JT", "FAWCETT JT", "FAWCETT JT", "FAWCETT JT", 
"FAWCETT JT", "FAWCETT JT"), Target = c("SELL RR", "GILLASPY RT", 
"KROUT JA", "GILLASPY RT", "KROUT JA", "DEJONG GF", "FAWCETT JT", 
"ARNOLD F", "CARINO BV", "ROOT BD", "DEJONG G", "ABAD RG", "DEJONG GF", 
"BOUVIER LF", "ARNOLD F", "PARK IH", "CARINO BV", "ROOT BD", 
"DEJONG G", "ABAD RG"), Type = c("Undirected", "Undirected", 
"Undirected", "Undirected", "Undirected", "Undirected", "Undirected", 
"Undirected", "Undirected", "Undirected", "Undirected", "Undirected", 
"Undirected", "Undirected", "Undirected", "Undirected", "Undirected", 
"Undirected", "Undirected", "Undirected"), Id = c(2386L, 2385L, 
2384L, 3635L, 3634L, 3636L, 401L, 397L, 398L, 399L, 403L, 396L, 
400L, 402L, 598L, 602L, 601L, 604L, 605L, 597L), Label = c(NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA), Weight = c(1, 1, 1, 1, 1, 1, 3, 2, 2, 1, 1, 2, 2, 
1, 3, 1, 2, 1, 1, 2), ayjid = c("['HUMPHREY CR 1977 RURAL SOCIOLOGY']", 
"['HUMPHREY CR 1977 RURAL SOCIOLOGY']", "['HUMPHREY CR 1977 RURAL SOCIOLOGY']", 
"['HUMPHREY CR 1977 RURAL SOCIOLOGY']", "['HUMPHREY CR 1977 RURAL SOCIOLOGY']", 
"['SELL RR 1978 JOURNAL OF POPULATION']", "['DEJONG GF 1983 INTERNATIONAL MIGRATION REVIEW', 'DEJONG G 1986 POPULATION AND ENVIRONMENT', 'FAWCETT JT 1994 POPULATION AND ENVIRONMENT']", 
"['DEJONG GF 1983 INTERNATIONAL MIGRATION REVIEW', 'GARDNER RW 1986 POPULATION AND ENVIRONMENT']", 
"['DEJONG GF 1983 INTERNATIONAL MIGRATION REVIEW', 'GARDNER RW 1986 POPULATION AND ENVIRONMENT']", 
"['DEJONG G 1986 POPULATION AND ENVIRONMENT']", "['DEJONG G 1986 POPULATION AND ENVIRONMENT']", 
"['DEJONG GF 1983 INTERNATIONAL MIGRATION REVIEW', 'DEJONG G 1986 POPULATION AND ENVIRONMENT']", 
"['DEJONG GF 1983 INTERNATIONAL MIGRATION REVIEW', 'GARDNER RW 1986 POPULATION AND ENVIRONMENT']", 
"['BOUVIER LF 1986 POPULATION BULLETIN']", "['DEJONG GF 1983 INTERNATIONAL MIGRATION REVIEW', 'ARNOLD F 1989 INTERNATIONAL MIGRATION REVIEW', 'FAWCETT JT 1987 INTERNATIONAL MIGRATION REVIEW']", 
"['ARNOLD F 1989 INTERNATIONAL MIGRATION REVIEW']", "['DEJONG GF 1983 INTERNATIONAL MIGRATION REVIEW', 'ARNOLD F 1989 INTERNATIONAL MIGRATION REVIEW']", 
"['DEJONG G 1986 POPULATION AND ENVIRONMENT']", "['DEJONG G 1986 POPULATION AND ENVIRONMENT']", 
"['DEJONG GF 1983 INTERNATIONAL MIGRATION REVIEW', 'DEJONG G 1986 POPULATION AND ENVIRONMENT']"
)), .Names = c("Source", "Target", "Type", "Id", "Label", "Weight", 
"ayjid"), row.names = c(NA, 20L), class = "data.frame")

3
请问您能否提供您的数据框(data.frame)呢? - Colonel Beauvel
我的数据框架(https://github.com/Koptyaevas/Co-authorship) - koptyaevas
不行,不行,不行。把数据框放在你的问题中 - 所有信息都汇集在同一个地方!你有没有想过,由于公司防火墙的限制,有些人可能无法访问你的链接?如果你的数据框很大,只需放一个代表性的子集即可! - Colonel Beauvel
感谢您的评论,我已经编辑了我的问题。实际上,我的数据框并不是太大,希望有人会打开它。 - koptyaevas
同样的编号,不要不要不要 ;) 我的意思是将您的dput结果复制粘贴到这里,而不是放在无法访问的地方! - Colonel Beauvel
再次感谢,我真的很菜 :( - koptyaevas
2个回答

3

请尝试以下操作:

s <- strsplit(gsub("\\[|\\]|\\'","",df$ayjid),", ",fixed = TRUE)
res <- data.frame(Id = rep(df$Id, lengths(s)), result = unlist(s))

merge(df,res)

我希望你已经了解到在最新版本的R中,lengths函数可以替代sapply(s, length)。但是加一分 :-) - A5C1D2H2I1M1N2O1R2T1
@AnandaMahto,我之前不知道有lenghts这个好用的方法,已经在帖子中更新了。 - zx8754

2

使用我“splitstackshape”包中的cSplit非常简单:

library(splitstackshape)
cSplit(as.data.table(temp)[, ayjid := gsub("[][]", "", ayjid)],
       "ayjid", ",", "long")
#          Source      Target       Type   Id Label Weight                                            ayjid
#  1: HUMPHREY CR     SELL RR Undirected 2386    NA      1               'HUMPHREY CR 1977 RURAL SOCIOLOGY'
#  2: HUMPHREY CR GILLASPY RT Undirected 2385    NA      1               'HUMPHREY CR 1977 RURAL SOCIOLOGY'
#  3: HUMPHREY CR    KROUT JA Undirected 2384    NA      1               'HUMPHREY CR 1977 RURAL SOCIOLOGY'
#  4:     SELL RR GILLASPY RT Undirected 3635    NA      1               'HUMPHREY CR 1977 RURAL SOCIOLOGY'
#  5:     SELL RR    KROUT JA Undirected 3634    NA      1               'HUMPHREY CR 1977 RURAL SOCIOLOGY'
#  6:     SELL RR   DEJONG GF Undirected 3636    NA      1             'SELL RR 1978 JOURNAL OF POPULATION'
#  7:  GARDNER RW  FAWCETT JT Undirected  401    NA      3  'DEJONG GF 1983 INTERNATIONAL MIGRATION REVIEW'
#  8:  GARDNER RW  FAWCETT JT Undirected  401    NA      3       'DEJONG G 1986 POPULATION AND ENVIRONMENT'
#  9:  GARDNER RW  FAWCETT JT Undirected  401    NA      3     'FAWCETT JT 1994 POPULATION AND ENVIRONMENT'
# 10:  GARDNER RW    ARNOLD F Undirected  397    NA      2  'DEJONG GF 1983 INTERNATIONAL MIGRATION REVIEW'
# 11:  GARDNER RW    ARNOLD F Undirected  397    NA      2     'GARDNER RW 1986 POPULATION AND ENVIRONMENT'
# 12:  GARDNER RW   CARINO BV Undirected  398    NA      2  'DEJONG GF 1983 INTERNATIONAL MIGRATION REVIEW'
# 13:  GARDNER RW   CARINO BV Undirected  398    NA      2     'GARDNER RW 1986 POPULATION AND ENVIRONMENT'
# 14:  GARDNER RW     ROOT BD Undirected  399    NA      1       'DEJONG G 1986 POPULATION AND ENVIRONMENT'
# 15:  GARDNER RW    DEJONG G Undirected  403    NA      1       'DEJONG G 1986 POPULATION AND ENVIRONMENT'
# 16:  GARDNER RW     ABAD RG Undirected  396    NA      2  'DEJONG GF 1983 INTERNATIONAL MIGRATION REVIEW'
# 17:  GARDNER RW     ABAD RG Undirected  396    NA      2       'DEJONG G 1986 POPULATION AND ENVIRONMENT'
# 18:  GARDNER RW   DEJONG GF Undirected  400    NA      2  'DEJONG GF 1983 INTERNATIONAL MIGRATION REVIEW'
# 19:  GARDNER RW   DEJONG GF Undirected  400    NA      2     'GARDNER RW 1986 POPULATION AND ENVIRONMENT'
# 20:  GARDNER RW  BOUVIER LF Undirected  402    NA      1            'BOUVIER LF 1986 POPULATION BULLETIN'
# 21:  FAWCETT JT    ARNOLD F Undirected  598    NA      3  'DEJONG GF 1983 INTERNATIONAL MIGRATION REVIEW'
# 22:  FAWCETT JT    ARNOLD F Undirected  598    NA      3   'ARNOLD F 1989 INTERNATIONAL MIGRATION REVIEW'
# 23:  FAWCETT JT    ARNOLD F Undirected  598    NA      3 'FAWCETT JT 1987 INTERNATIONAL MIGRATION REVIEW'
# 24:  FAWCETT JT     PARK IH Undirected  602    NA      1   'ARNOLD F 1989 INTERNATIONAL MIGRATION REVIEW'
# 25:  FAWCETT JT   CARINO BV Undirected  601    NA      2  'DEJONG GF 1983 INTERNATIONAL MIGRATION REVIEW'
# 26:  FAWCETT JT   CARINO BV Undirected  601    NA      2   'ARNOLD F 1989 INTERNATIONAL MIGRATION REVIEW'
# 27:  FAWCETT JT     ROOT BD Undirected  604    NA      1       'DEJONG G 1986 POPULATION AND ENVIRONMENT'
# 28:  FAWCETT JT    DEJONG G Undirected  605    NA      1       'DEJONG G 1986 POPULATION AND ENVIRONMENT'
# 29:  FAWCETT JT     ABAD RG Undirected  597    NA      2  'DEJONG GF 1983 INTERNATIONAL MIGRATION REVIEW'
# 30:  FAWCETT JT     ABAD RG Undirected  597    NA      2       'DEJONG G 1986 POPULATION AND ENVIRONMENT'
#          Source      Target       Type   Id Label Weight                                            ayjid

如果您想要同时删除结果列中的引号,可以使用ayjid:= gsub(“ [] [']”,“”,ayjid)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接