首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >尝试使用变量名删除R中的行

尝试使用变量名删除R中的行
EN

Stack Overflow用户
提问于 2016-10-21 23:00:30
回答 2查看 204关注 0票数 0

我正在尝试删除R中for循环中的一些行。条件涉及到将其与其下面的行进行比较,因此我不能在括号内进行过滤。

下面是完整的循环:

代码语言:javascript
复制
for (j in 1:(nrow(referrals) - 1)) {
  k <- j + 1
  if (referrals[j, "Client ID"] == referrals[k, "Client ID"] & 
      referrals[j, "Provider SubCode"] == referrals[k, "Provider SubCode"]) {
    referrals[-k, ]
  }
}

代码运行时没有任何问题,但是没有删除任何行(我知道应该删除一些行)。

EN

回答 2

Stack Overflow用户

发布于 2016-10-22 00:25:36

您需要添加一个供用户使用的reproducible example。我不知道您的数据结构,所以我只能猜测这是否适用于您。出于评论中指出的原因,我不会使用循环。我将首先确定要删除的行,然后使用常规方法删除它们。考虑一下:

代码语言:javascript
复制
set.seed(4499)  # this makes the example exactly reproducible
d <- data.frame(Client.ID        = sample.int(4, 20, replace=T),
                Provider.SubCode = sample.int(4, 20, replace=T))
d
#    Client.ID Provider.SubCode
# 1          1                1
# 2          1                4
# 3          3                2
# 4          4                4
# 5          4                1
# 6          2                2
# 7          2                2  # redundant
# 8          3                1
# 9          4                4
# 10         3                4
# 11         1                3
# 12         1                3  # redundant
# 13         3                4
# 14         1                2
# 15         3                2
# 16         4                4
# 17         3                4
# 18         2                2
# 19         4                1
# 20         3                3
redundant.rows <- with(d, Client.ID[1:nrow(d)-1]==Client.ID[2:nrow(d)] &
                          Provider.SubCode[1:nrow(d)-1]==Provider.SubCode[2:nrow(d)] )
d[-c(which(redundant.rows)+1),]
#    Client.ID Provider.SubCode
# 1          1                1
# 2          1                4
# 3          3                2
# 4          4                4
# 5          4                1
# 6          2                2
# 8          3                1  # 7 is missing
# 9          4                4
# 10         3                4
# 11         1                3
# 13         3                4  # 12 is missing
# 14         1                2
# 15         3                2
# 16         4                4
# 17         3                4
# 18         2                2
# 19         4                1
# 20         3                3
票数 0
EN

Stack Overflow用户

发布于 2016-10-22 02:45:06

使用您提供的所有信息,我相信这可能是一个很好的替代方案:

代码语言:javascript
复制
duplicated.rows <- duplicated(referrals)

然后,如果您希望运行重复的结果:

代码语言:javascript
复制
referrals.double <- referrals[duplicated.rows, ]

但是,如果您希望运行非重复结果:

代码语言:javascript
复制
referrals.not.double <- referrals[!duplicated.rows, ]

如果你喜欢一步一步来(也许你会感兴趣):

代码语言:javascript
复制
duplicated.rows.Client.ID <- duplicated(referrals$"Client ID")

duplicated.rows.Provider.SubCode <- duplicated(referrals$"Provider SubCode")

referrals.not.double <- referrals[!duplicated.rows.Client.ID, ]

referrals.not.double <- referrals.not.double[!duplicated.rows.Client.ID, ]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40179912

复制
相关文章

相似问题

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