【发布时间】:2026-01-06 21:10:01
【问题描述】:
我有一个包含多篇期刊文章的数据集。不同的物品都有不同的识别码(WoS_No)。不同的文章在不同的行。
这些文章有不同数量的作者。如果一篇论文的作者多于 1 位,则识别码会在多行中重复,每个作者一行。
df 中还有其他信息,其中一些与论文有关(并且对于具有相同 WoS_No 代码的所有行都是相同的。但是,有些仅与作者有关(如他们的教师),然后打印出来超过行。
请看下面的例子:
# Original df
df <- data.frame("WoS_No" = matrix(c("WOS:000352315900021", "WOS:000352315900021", "WOS:000352315900021", "WOS:000352315900021", "WOS:000362644700013", "WOS:000362644700013", "WOS:000382460200025", "WOS:000381736200014", "WOS:000371540200019"), 9, 1))
df$Author <- c("CHENEVIX, Georg", "CHENEVIX, Georg", "DOLCE, Ric", "DOLCE, Ric", "CLOUST, A", "STEVEN, A", "WANG, Zhi", "COIN, L", "BARL, Kare")
df$Faculty <- c("Medicine", NA, "HASS", NA, "HABS", "Medicine", "Medicine", "IMB", NA)
df$CNCI <- c(10.51, 10.51, 10.51, 10.51, 37.47, 37.47, 0.84, 8.05, 29.41)
sapply(data2, class)
我真的很想安排 df,这样每篇文章只有 1 行(即每行一个 WoS_No)。
我希望将作者姓名分成不同的列(请参阅下面的“Author1”、“Author2”列)。我尝试从长格式转换为宽格式,但没有成功,可能是因为大多数文章的作者不同 - 所以它给每个名字一个新列(我不能有,因为大约有 20,000 个名字)
如果这太繁琐,我会很高兴将所有作者姓名折叠到“作者”列中的一个字符串中,所有姓名用分号分隔(这意味着我可以稍后在需要时将它们拆分)。请参阅下面的“学院”列。
# New df options
dfnew <- data.frame("WoS_No" = matrix(c("WOS:000352315900021", "WOS:000362644700013", "WOS:000382460200025", "WOS:000381736200014", "WOS:000371540200019"), 5, 1))
dfnew$Author1 <- c("CHENEVIX, Georg", "CLOUST, A", "WANG, Zhi", "COIN, L", "BARL, Kare")
dfnew$Author2 <- c("DOLCE, Ric", "STEVEN, A", "", "", "")
dfnew$Faculties <- c("Medicine; NA; HASS; NA", "HABS; Medicine", "Medicine", "IMB", "NA")
dfnew$CNCI <- c(10.51, 37.47, 0.84, 8.05, 29.41)
我尝试循环遍历每个 WoS_No 并一个一个地折叠,但因为我有 68,000 个 WoS_No,所以未能在合理的时间内完成。
我真的很难过,非常感谢任何人能给我的任何帮助。
【问题讨论】: