根据每行第 n 个位置值过滤/子集 R 数据帧

时间:2021-03-30 10:06:53

标签: r dataframe

我有一个包含 2 列的“df”:

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

df <- cbind.data.frame(Combinations, Values)

我正在尝试找到一种方法来对数据框进行子集化或过滤,其中“组合”列的第 7、第 8 和第 9 位数字等于 311。对于给出的示例,我希望组合的 001111311 1、0013113112、0022223114

在某些情况下,我需要在不同的第 n 个位置找到不同的组合。

我知道 substring() 可以为单行找到这些值,但我不确定如何将其应用于整个数据帧。

4 个答案:

答案 0 :(得分:3)

subtring 也适用于向量。

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)

答案 1 :(得分:2)

这行得通吗?

class Userextends ChangeNotifier {
  final String id,dob;

  User(
      {this.id,
      this.dob});

  factory User.fromJson(Map<String, dynamic> json) {
    return User(
      id: json['id'],
      dob: json['dob'],
    
    );
  }
}

答案 2 :(得分:2)

另一个基本的 R 想法:

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 Values
2   0011113111      2
3   0013113112      3
4   0022223114      4

提示,如果您想了解更多关于正则表达式的信息,这个网站对我有很大帮助:https://regexr.com/3elkd

答案 3 :(得分:0)

不漂亮但有效:

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

数据:

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

df <- cbind.data.frame(Combinations, Values)