我有一个超过200列的数据集。我对基于两列Title和Date重复的字符串感兴趣。
输入:
Title Date Country
This is 2007 Afghanistan
a test to 1999 Switzerland
find country 2004 Sweden
names that share 1987 Algeria
certain titles. 2004 Afghanistan
a test to 1999 Albania
a test to 1999 Afghanistan
names that share 1987 Afghanistan
a test to 2010 Algeria
具体来说,每当第 i 行的TitleANDDate与第 j 行匹配时,我希望记录第三列Country中显示的所有唯一值。
例如:考虑Title=="a test to" & Date==1999
.以下国家出现在所有匹配中的行:阿尔巴尼亚、阿富汗、瑞士,因此,对于每一行匹配项,我们都要输入Albania, Afghanistan, Switzerland
(而不是Algeria
等)。
预期产出:
Title Date Country Total_Countries
This is 2007 Afghanistan Afghanistan
a test to 1999 Switzerland Albania, Afghanistan, Switzerland
find country 2004 Sweden Sweden
names that share 1987 Algeria Algeria, Afghanistan
certain titles. 2004 Afghanistan Afghanistan
a test to 1999 Albania Albania, Afghanistan, Switzerland
a test to 1999 Afghanistan Albania, Afghanistan, Switzerland
names that share 1987 Afghanistan Algeria, Afghanistan
a test to 2010 Algeria Algeria
在我看来,这似乎是这个问题的一个更复杂的版本:Create new column with matched values in R
我最初的解决方案是
x <- aggregate(Country ~ Title + Date, df, FUN = paste, collapse=", ")
names(x)[3] <- "Total_Countries"
df <- merge(df, x, all.x=T)
但这并不能产生正确的结果。如有任何建议,将不胜感激。
4条答案
按热度按时间uplii1fm1#
分组后可以使用
mutate
数据
rt4zxlrg2#
请注意,您的结果是正确的。顺序通常不同,
merge
中的sort
参数没有多大帮助。要保持顺序,您可以执行以下操作:jdzmm42g3#
假设您有列Title、Date和Country,根据您的问题,我相信您正在尝试创建列Total_Countries。
为了做到这一点,你可以使用tidyverse group_by和summarise:
93ze6v8z4#