基于每行n'对R数据帧进行过滤/子集设置;第位值

基于每行n'对R数据帧进行过滤/子集设置;第位值,r,dataframe,R,Dataframe,我有一个带有两列的“df”: Combinations <- c(0011111111, 0011113111, 0013113112, 0022223114) Values <- c(1,2,3,4) df <- cbind.data.frame(Combinations, Values) 组合这样行吗 library(dplyr) library(stringr) df %>% filter(str_sub(Combinations, 7,9) =

我有一个带有两列的“df”:

Combinations <- c(0011111111, 0011113111, 0013113112, 0022223114)
Values <- c(1,2,3,4)

df <- cbind.data.frame(Combinations, Values)
组合这样行吗

library(dplyr)    
library(stringr)    
df %>% filter(str_sub(Combinations, 7,9) == 311)
  Combinations Values
1   0011113111      2
2   0013113112      3
3   0022223114      4
这样行吗

library(dplyr)    
library(stringr)    
df %>% filter(str_sub(Combinations, 7,9) == 311)
  Combinations Values
1   0011113111      2
2   0013113112      3
3   0022223114      4

子字符串
也适用于向量

subset(df, substring(Combinations, 7, 9) == 311)

#  Combinations Values
#2   0011113111      2
#3   0013113112      3
#4   0022223114      4
数据

Combinations <- c("0011111111", "0011113111", "0013113112", "0022223114")
Values <- c(1,2,3,4)
df <- data.frame(Combinations, Values)

组合
子字符串
也可以用于向量

subset(df, substring(Combinations, 7, 9) == 311)

#  Combinations Values
#2   0011113111      2
#3   0013113112      3
#4   0022223114      4
数据

Combinations <- c("0011111111", "0011113111", "0013113112", "0022223114")
Values <- c(1,2,3,4)
df <- data.frame(Combinations, Values)
组合另一个基本想法:

Combinations <- c("0011111111", "0011113111", "0013113112", "0022223114")
Values <- c(1,2,3,4)
df <- data.frame(Combinations, Values)

df[grep(pattern = "^[0-9]{6}311.$", df$Combinations), ]
作为提示,如果您想了解更多有关正则表达式的信息,此网站可以为我提供很多帮助:

另一个基本想法:

Combinations <- c("0011111111", "0011113111", "0013113112", "0022223114")
Values <- c(1,2,3,4)
df <- data.frame(Combinations, Values)

df[grep(pattern = "^[0-9]{6}311.$", df$Combinations), ]
作为提示,如果您想了解有关正则表达式的更多信息,此网站可以为我提供很多帮助:

不漂亮,但可以工作:

df[which(lapply(strsplit(df$Combinations, ""), function(x) which(x[7]==3 & x[8]==1 & x[9]==1))==1),]
  Combinations Values
2   0011113111      2
3   0013113112      3
4   0022223114      4
数据:

组合不漂亮但有效:

df[which(lapply(strsplit(df$Combinations, ""), function(x) which(x[7]==3 & x[8]==1 & x[9]==1))==1),]
  Combinations Values
2   0011113111      2
3   0013113112      3
4   0022223114      4
数据:


你好,保罗,谢谢你的链接。。。我在链接中插入了这个表达式,但我仍然不太明白它是如何工作的。。311部分很简单,但是[0-9]和{6}是什么呢?对不起,我觉得我应该知道这件事。。!Hi@Birdman:)没问题,我也很难理解正则表达式,不过这个网站很不错,因为它解释了当你把鼠标放在语句上时的含义。这里,[0-9]表示“匹配0到9范围内的字符,{6}表示“匹配前面标记的6”,即它表示“它们是0到9之间的6个数字”。另外,
^
$
表示“这是字符串开始/结束的地方”
表示“匹配任何字符”,请注意,
^[0-9]{6}311[0-9]$
似乎也起作用。因此,使用相同的数据,如果我输入
df[grep(pattern=“^[0-9]{1}011.$”,df$组合),
则我希望“0011111111111”,“0011113111”是结果组合,因为前面的数字(标记?)是0(位于[0-9]范围),然后接下来的3个值是011——我误解了一些东西,再次抱歉!您很接近,我认为您需要
^[0-9]{1}011.{6}$
^[0-9]{1}011[0-9]{6}$
作为正则表达式,需要描述所有字符串
在这里查找模式
311
011
嗨,保罗,谢谢你的链接…我把表达式插入了链接,但我仍然不太明白它是如何工作的..311部分很简单,但是[0-9]和{6}是什么?抱歉,我觉得我应该知道这一点。!Hi@Birdman:)没问题,我也很难理解正则表达式,但这个网站很好,因为它解释了当你将鼠标放在语句上时的含义。这里,[0-9]表示“匹配0到9范围内的字符,{6}表示“匹配前面标记的6”,即它的意思是“它们是介于0和9之间的6个数字”。另外,
^
$
表示“这是字符串开始/结束的地方”。
表示“匹配任何字符”,请注意,
^[0-9]{6}311[0-9]$
似乎也能工作。因此,如果我输入
df[grep(pattern=“^[0-9]{1}011.$”,df$,df$)组合,使用相同的数据,]
然后我希望“0011111111”、“0011113111”是结果组合,因为前面的数字(标记?)是0(在[0-9]范围内),然后接下来的3个值是011——我误解了一些东西,再次抱歉!你很接近了,我想你需要
^[0-9]{1}011.{6}$
^[0-9]{1}011 0-9]{6}$
作为正则表达式,需要对所有字符串进行描述。
{}
用于定位模式
311
011