解析R中的特定元素

时间:2018-07-13 16:09:50

标签: r parsing

V21.X1  V21.X2
A       02:01:03
A       02:01:04
A       03:01:05
A       03:01:04

我使用which从数据帧中提取了一个向量或一列,并将其拆分为两个新列(如上所示),但是我想过滤包含02:01的行。我尝试再次使用V21.X1分别拆分which,但R并未将V21.X2视为单独的一列,而是将X1X2的一部分合并或将{ {1}}。

我想将此输出存储在另一个变量中

V21

1 个答案:

答案 0 :(得分:0)

我们可以使用正则表达式来匹配用于过滤行的模式

subset(df1, grepl("^02:01", V21.X2))
#   V21.X1   V21.X2
#1      A 02:01:03
#2      A 02:01:04

或使用substr提取,然后执行==

subset(df1, substr(V21.X2, 1, 5)=='02:01')
#  V21.X1   V21.X2
#1      A 02:01:03
#2      A 02:01:04

如果数据集是matrix列,则仅存在一个sngle列,即“ V21”,其中存储matrix和两列“ X1”和“ X2”

m1 <- cbind(X1 = "A", X2 = c("02:01:03", "02:01:04", "03:01:05", "03:01:04"))
df1 <- data.frame(V21 = rep(NA, 4))
df1$V21 <- m1
subset(df1,  grepl("^02:01", V21.X2))
  

grepl(“ ^ 02:01”,V21.X2)中的错误:找不到对象'V21.X2'

一种解决方案是将data.frame中的列转换为普通列并执行subset

df2 <- do.call(data.frame, df1)
subset(df2, grepl("^02:01", V21.X2))
#   V21.X1   V21.X2
#1      A 02:01:03
#2      A 02:01:04

数据

df1 <- structure(list(V21.X1 = c("A", "A", "A", "A"), V21.X2 = c("02:01:03", 
 "02:01:04", "03:01:05", "03:01:04")), .Names = c("V21.X1", "V21.X2"
 ), class = "data.frame", row.names = c(NA, -4L))