我请求帮助解决我最近遇到的一个大问题。我得到一个像
这样的数据框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;。
答案 0 :(得分:0)
假设您已使用readLines读取条件文件。这里我从textConnection读取而不是写文件
tt<-textConnection("A>0
B>1
C<0")
lines <- readLines(tt)
# lines <- readLines("tmp.csv") in your case
现在,我们可以将这些表达式解析为包含lapply
和parse()
expr <- lapply(lines, function(t) parse(text=t)[[1]])
现在,我们可以使用lapply
,do.call
和subset
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