解析文件中的条件并将其应用到数据框

时间:2015-12-09 19:49:12

标签: r parsing csv conditional-statements

我请求帮助解决我最近遇到的一个大问题。我得到一个像

这样的数据框
df <- data.frame(x=c("c1","c2","c3"),A=c(0,1,-1),B=c(2,0,1),C=c(0,-1,-1))

和一个文件&#34; tmp.csv&#34;符合以下条件

A>0
B>1
C<0

我需要加载这些条件,解析它们并将它们应用于数据框。所以,对于A,我期待c1和c2。对于B,c1和C,c2,c3。

我一直试图找到类似的东西,但我没有。也许here有类似的问题,但我没有得到解决方案。我也找到了函数

  

解析

它可能会进行解析,但即使阅读文档我也没有得到它的作用......

我真的不知道从哪里开始(解析并理解提示中的条件)。有什么帮助吗?

编辑:我在这里添加了一个非常接近当前请求的另一个请求。如果我需要检查哪个&#34; cx&#34;满足所有条件(这里只有A和B,让我们丢弃C)而不是每次都拿一个,我该怎么办?

我想过简单地使用

lines <- readLines("tmp.csv")
expr <- lapply(lines, function(t) parse(text=t)[[1]])
do.call("subset", list(quote(df), expr))

但我收到错误&#34;&#39;子集&#39;必须是逻辑&#34;。

1 个答案:

答案 0 :(得分:0)

假设您已使用readLines读取条件文件。这里我从textConnection读取而不是写文件

tt<-textConnection("A>0
B>1
C<0")
lines <- readLines(tt)
# lines <- readLines("tmp.csv") in your case

现在,我们可以将这些表达式解析为包含lapplyparse()

的列表
expr <- lapply(lines, function(t) parse(text=t)[[1]])

现在,我们可以使用lapplydo.callsubset

将这些内容应用于data.frame
df <- data.frame(x=c("c1","c2","c3"),A=c(0,1,-1),B=c(2,0,1),C=c(0,-1,-1))
lapply(expr, function(x) do.call("subset", list(quote(df), x)))

# [[1]]
#    x A B  C
# 2 c2 1 0 -1
# 
# [[2]]
#    x A B C
# 1 c1 0 2 0
# 
# [[3]]
#    x  A B  C
# 2 c2  1 0 -1
# 3 c3 -1 1 -1