R-如何使用整数索引对数据框的行进行子集化?

凯特·牛顿

我正在尝试找到一种方法,用于根据出现在一个列/变量中的某个字符串的每次出现来对数据帧进行子集或切片-例如,我想删除两次出现的字符串之间的所有行。这个问题类似于这个问题,但是关键的区别是我有多次出现该字符串,并且想删除每对出现之间的行。我是R笨拙,我找不到以任何优雅的方式将解决方案应用于两个以上整数的索引的方法。

说我有以下数据框:

a <- c("one", "here is a string", "two", "three", "four", "another string", "five", "six", "yet another string", "seven", "last string")
b <- c("a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k")
c <- c("type1", "type1", "type1", "type1", "type1", "type1", "type2", "type2", "type2", "type2", "type2")

df <- data.frame(a,b,c)

给出以下内容:

print(df)

                 a b     c
1                 one a type1
2    here is a string b type1
3                 two c type1
4               three d type1
5                four e type1
6      another string f type1
7                five g type2
8                 six h type2
9  yet another string i type2
10              seven j type2
11        last string k type2

我想对其进行子集化,以便删除字符串'string'之间的所有行(包括字符串的任何迭代):

                    a b     c
1                 one a type1
2                five g type2
8                 six h type2

使用我链接到的问题中接受的解决方案,我可以通过创建行号索引并使用索引中的前两个位置来删除第一组行:

index = grep("string", df$a)

df[-(ind[1]:ind[2]),]

但是我想做的还包括删除索引中下一对整数之间的行

df[-(ind[3]:ind[4]),]

我的实际索引有128个整数(64个“对”),因此像我在上面所做的那样手动提取行会很麻烦。如果找不到合适的解决方案,我当前的计划是打印索引并手动提取行(tbh,可能比编写此问题要快,但看起来很糟糕,不会教我任何东西):

print(index)

[1]  2  6  9 11

df[-c(2:6, 9:11), ]

有没有一种方法可以遍历索引中的每对连续整数,或者有另一种方法可以做我想做的事情?我不是一个非常有经验的R用户,因此在创建此示例之前(我希望遵循reprex标准;这是我第一次提出问题),我一直在搜索SO以了解我要尝试做的事情。

我在reprex中包括了列“ c”,因为它反映了我实际数据的结构(对于列“ c”的每次观察变化,列“ a”中都有一对“字符串”出现),我想知道是否有一种方法可以将group_by()与基本子设置表达式一起使用?但这可能完全是鲱鱼。只是包括它以防万一。

罗纳克·沙

在连续的index使用对之间创建一个序列,Map并删除这些行。获取连续对的一种方法是使用备用逻辑值。

df[-unlist(Map(`:`, index[c(TRUE, FALSE)], index[c(FALSE, TRUE)])),]

#     a b     c
#1  one a type1
#7 five g type2
#8  six h type2

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使用R对数据框中的行进行子集和重复

如何有效地基于列对数据进行子集化(R)

为什么我可以使用3维在R中对数据帧进行子集化?

使用R对数据集中的选定列进行子集化的最快方法

如何按日期对数据进行子集化并在R中执行多项操作?

如何使用R根据数据框中单个列的最小值对特定列中的行进行子集

如何使用基于R中最近位置的坐标对数据框中的行进行子集化

如何像R中的SAS那样按列名对数据帧进行子集化?

如何在R中使用grep选择精确匹配来对数据帧进行子集化

如何使用R函数对数据框进行子集化,并在以后使用该数据框?

R:对数据框中的行进行重新排序

使用 R 对数据集进行子集化的两种方法失败,请求帮助

在 R 中,如何根据向量中的值对数据帧的行进行子集

如何使用选择输入在 r Shiny 中对数据帧进行子集化?

在 R 中,如何根据函数内部的值列表正确地对数据框进行子集化?

如何根据索引号对数据框进行子集化?

在 R 中对数据集进行子集化

如何使用占位符在 r 中对数据帧进行子集化

R:使用 model$xlevels 对数据进行子集化以获得训练数据

从 R 中的函数内对数据进行子集化

如何根据R中的多个变量对数据框进行子集化

如何根据R中列名中的数字条件对数据进行子集化?

R:如何同时按条件和随机对数据帧进行子集化?

无法通过在 R 中使用带有选择器的 cbind() 对数据框进行子集化

R:以 12 步为单位对数据框的行进行子集/提取

你如何从 R 中的列表中对数据进行子集化?

如何根据R中两列不匹配的值对数据框进行子集化?

R:如何对数据框列中的字符串进行子集化?

如何根据多个联合条件在 R 中对数据框进行子集化