R删除字符向量中的重复元素,而不是重复行
我遇到了这个问题 我有一个数据框(日期),其中一些文档ID和日期存储在字符向量中:R删除字符向量中的重复元素,而不是重复行,r,duplicates,R,Duplicates,我遇到了这个问题 我有一个数据框(日期),其中一些文档ID和日期存储在字符向量中: Doc Dates 1 12345 c("06/01/2000","08/09/2002") 2 23456 c("07/01/2000", 09/08/2003", "07/01/2000") 3 34567 c("09/06/2004", "09/06/2004", "12/30/2006") 4 45678 c("06/01/2000","08/09/2002") 我正在尝试删除日期中的重复元
Doc Dates
1 12345 c("06/01/2000","08/09/2002")
2 23456 c("07/01/2000", 09/08/2003", "07/01/2000")
3 34567 c("09/06/2004", "09/06/2004", "12/30/2006")
4 45678 c("06/01/2000","08/09/2002")
我正在尝试删除日期中的重复元素以获得此结果:
Doc Dates
1 12345 c("06/01/2000","08/09/2002")
2 23456 c("07/01/2000", 09/08/2003")
3 34567 c("09/06/2004", "12/30/2006")
4 45678 c("06/01/2000","08/09/2002")
我试过:
R>unique(dates$dates)
但它会按日期删除重复的行:
Doc Dates
1 12345 c("06/01/2000","08/09/2002")
2 23456 c("07/01/2000", 09/08/2003")
3 34567 c("09/06/2004", "12/30/2006")
关于如何仅删除日期中的重复元素,而不按日期删除重复行,是否有任何帮助
**用数据更新
# Match some text string (dates) from some text:
df1$dates <- as.character(strapply(df1[[2]], "((\\D\\d{1,2}(/|-)\\d{1,2}(/|-)\\d{2,4})| ([^/]\\d{1,2}(/|-)\\d{2,4})|((JAN|FEB|MAR|APR|MAY|JUN|JUL|AUG|SEP|OCT|NOV){1}[\\s|-]{0,2}\\d{1,4}(\\D[\\s|-]{0,}\\d{2,4}){0,}))"))
# Drop first 2 columns from dataframe
df2<-df1[ -c(1,2)]
# List data
>df2
872 7/23/2007
873 c(" 11/4/2007", " 11/4/2007")
874 c(" 4/2/2008", " 8/2/2007")
880 11/14/2006
> class(df2)
[1] "data.frame"
> class(df2$dates)
[1] "character"
> dput(df2)
structure(list(dates = c("NULL", "NULL", " 7/23/2007", "c(\" 11/4/2007\", \" 11/4/2007\")",
"c(\" 4/2/2008\", \" 8/2/2007\")", "NULL", "NULL", "NULL", "NULL",
"NULL", " 11/14/2006")), .Names = "dates", class = "data.frame", row.names = 870:880)
#从一些文本中匹配一些文本字符串(日期):
df1$dates类(df2)
[1] “数据帧”
>类别(df2$日期)
[1] “角色”
>dput(df2)
结构(列表日期=c(“空”、“空”、“2007年7月23日”、“2007年11月4日”、“2007年11月4日”),
“c”(“4/2/2008\”、“8/2/2007\”)、“空”、“空”、“空”、“空”,
“NULL”,“11/14/2006”),.Names=“dates”,class=“data.frame”,row.Names=870:880)
因此,我的问题是如何消除第873行中的重复日期?尝试以下方法:
within(dates, Dates <- lapply(Dates, unique))
in(dates,dates我将gsub
outc(
和)
输入日期,然后使用,
未经测试,但可能类似于:
sapply(日期$dates,函数(x){
new.x=gsub(“c(|)”,“”,x)
new.x=strsplit(new.x,“,”)
独特的(新的.x)
})
我解决了从字符向量中删除重复值的问题-包裹一个lappy(Straply(),unique):
df1$date您可能正在寻找类似的东西
df
Doc Dates
1 12345 c("06/01/2000","08/09/2002")
2 23456 c("07/01/2000", "09/08/2003", "07/01/2000")
3 34567 c("09/06/2004", "09/06/2004", "12/30/2006")
4 45678 c("06/01/2000","08/09/2002")
Eval and Parse
x <- t(sapply(df[,"Dates"],function(x){unique(eval(parse(text = x)))}))
df$Dates <- paste(x[,1],x[,2],sep=",")
df
Doc Dates
1 12345 06/01/2000,08/09/2002
2 23456 07/01/2000,09/08/2003
3 34567 09/06/2004,12/30/2006
4 45678 06/01/2000,08/09/2002
Same can be achieved using Regex:
paste(unique(unlist(strsplit(gsub("c\\(|\\)","",'c("24/07/2012","22/01/2012","24/07/2012")'),","))),sep = "")
[1] "\"24/07/2012\"" "\"22/01/2012\""
Haven't tried on data but works
df
文件日期
112345C(“06/01/2000”、“08/09/2002”)
223456C(“07/01/2000”、“09/08/2003”、“07/01/2000”)
334567C(“09/06/2004”、“09/06/2004”、“12/30/2006”)
45678 c(“2000年1月6日”、“2002年9月8日”)
求值与解析
x请提供dput(dates)
的输出。只需复制/粘贴而不是重新创建数据会有所帮助。我认为dates
列实际上是一个列表,而不是字符串。Arun-无法从我使用的系统复制/通过(使询问变得非常困难)。我将在内部尝试,如果不成功,我将创建一个可在系统外部使用的数据集并重新发布。谢谢。仅供参考-我解决了问题:在Straply:df1$date@user2547308周围包装一个lappy(Straply(),unique),我建议您将其作为答案发布,以确保完整性和更好的格式。:-)
df
Doc Dates
1 12345 c("06/01/2000","08/09/2002")
2 23456 c("07/01/2000", "09/08/2003", "07/01/2000")
3 34567 c("09/06/2004", "09/06/2004", "12/30/2006")
4 45678 c("06/01/2000","08/09/2002")
Eval and Parse
x <- t(sapply(df[,"Dates"],function(x){unique(eval(parse(text = x)))}))
df$Dates <- paste(x[,1],x[,2],sep=",")
df
Doc Dates
1 12345 06/01/2000,08/09/2002
2 23456 07/01/2000,09/08/2003
3 34567 09/06/2004,12/30/2006
4 45678 06/01/2000,08/09/2002
Same can be achieved using Regex:
paste(unique(unlist(strsplit(gsub("c\\(|\\)","",'c("24/07/2012","22/01/2012","24/07/2012")'),","))),sep = "")
[1] "\"24/07/2012\"" "\"22/01/2012\""
Haven't tried on data but works