首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在R中删除数据帧中的相邻重复

在R中删除数据帧中的相邻重复
EN

Stack Overflow用户
提问于 2016-09-28 22:39:06
回答 1查看 253关注 0票数 1

这是我在Stack here的第一个问题。我在R中有一个数据帧,它有超过100列,应该有重复的列。我不能使用unique(),因为我只想删除每一列中的相邻行重复项。

代码语言:javascript
复制
L = list(c("AL", "AL", "AI", "AH", "BK", "CD", "CE", "BT", "BP", 
"BD", "BI", "AL"), c("AL", "AL", "AI", "AH", "BK", "AU", "BK", 
"CD", "V", "CE", "CE"), c("AL", "AL", "AI", "AH", "AU", "BK", 
"BQ"))
do.call(cbind, lapply(L, `length<-`, max(lengths(L))))

song 1  song 2  song 3
AL  AL  AL
AL  AL  AL
AI  AI  AI
AH  AH  AH
BK  BK  AU
CD  AU  BK
CE  BK  BQ
BT  CD  
BP  V   
BD  CE  
BI  CE  
AL      



song 1  song 2  song 3
AL  AL  AL
AI  AI  AI
AH  AH  AH
BK  BK  AU
CD  AU  BK
CE  BK  BQ
BT  CD  
BP  V   
BD  CE  
BI      
AL      

我见过以前的答案,似乎只适用于一篇专栏。

解决办法是

代码语言:javascript
复制
df = df[with(df, c(x[-1]!= x[-nrow(df)], TRUE)),]

我见过rle解决方案,但它们不起作用。考虑到我的数据帧中的列有不同的长度,我想知道是否有一种方法循环遍历所有列。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-09-28 23:38:49

假设你有一个这样的列表:

代码语言:javascript
复制
songs
# $song_1
# [1] "AL" "AL" "AI" "AH" "BK" "CD" "CE" "BT" "BP" "BD" "BI" "AL"
# 
# $song_2
# [1] "AL" "AL" "AI" "AH" "BK" "AU" "BK" "CD" "V"  "CE" "CE"
# 
# $song_3
# [1] "AL" "AL" "AI" "AH" "AU" "BK" "BQ"

dput共享可重用性

代码语言:javascript
复制
songs = structure(list(song_1 = c("AL", "AL", "AI", "AH", "BK", "CD", 
"CE", "BT", "BP", "BD", "BI", "AL"), song_2 = c("AL", "AL", "AI", 
"AH", "BK", "AU", "BK", "CD", "V", "CE", "CE"), song_3 = c("AL", 
"AL", "AI", "AH", "AU", "BK", "BQ")), .Names = c("song_1", "song_2", 
"song_3"))

您可以在一个列表项中排除相邻元素,类似于问题中的数据框架方法。

代码语言:javascript
复制
with(songs, song_1[song_1[-1] != song_1[-length(song_1)]])
# [1] "AL" "AI" "AH" "BK" "CD" "CE" "BT" "BP" "BD" "BI"

要对列表中的所有项执行此操作,我们使用lapply和一个匿名函数:

代码语言:javascript
复制
lapply(songs, function(s) s[s[-1] != s[-length(s)]])
# $song_1
# [1] "AL" "AI" "AH" "BK" "CD" "CE" "BT" "BP" "BD" "BI"
# 
# $song_2
# [1] "AL" "AI" "AH" "BK" "AU" "BK" "CD" "V" 
# 
# $song_3
# [1] "AL" "AI" "AH" "AU" "BK"

当然,您可以将lapply的结果分配给一个新对象,以覆盖现有的对象。

请注意,您的数据需要相当多的工作才能进入R,因为您是如何发布的。下次,请使用dput()或共享代码创建模拟数据。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39758727

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档