我有一个数据框列表,我想循环遍历它们并保留与某些列名称的某些值匹配的行,我想传递这些列名称的向量及其相应的值。
示例:
DF1 =
x y
10 s
5 h
DF2 =
x z y
11 h h
5 s s
5 h s
所以我想循环遍历这些数据帧,并保留任何具有(5,s)值的(x,y)列名称的行。这只是一个例子,我想要对我的代码进行整合。
我想到了这一点,但肯定不是这样的:
Data-Mining = sapply(DFlist,)
我很感激帮助。
答案 0 :(得分:1)
下面,我重新创建您在示例中提供的两个 [AllowAnonymous]
public ActionResult Reports(int Code, string type,string callback=null){
--- processing data--(which is working fine)
generatedPath = "df";
StringBuilder sb = new StringBuilder();
JavaScriptSerializer js = new JavaScriptSerializer();
sb.Append(callback + "(");
sb.Append(js.Serialize(generatedPath));
sb.Append(");");
return Json(sb, JsonRequestBehavior.AllowGet);
}
对象,然后使用data.frame
和lapply
包中的两个函数根据您所需的输出进行选择和过滤。 dplyr
对感兴趣的列进行子集,Select
选择符合某些逻辑标准/条件的行。
filter
编辑:我现在指定要保留的列,以及我在子集中接受的值。
答案 1 :(得分:1)
这样的事情,依靠merge
来保留行。如果要匹配许多变量,可能比编写选择语句更容易。我添加了一个额外的数据集,其中既没有x
或y
变量,也显示了这个问题的原因。
DF1 <- data.frame(x=c(10,5), y=c('s','h'))
DF2 <- data.frame(x=c(11,5,5), z=c('h', 's', 'h'), y = c('h','s','s'))
DF3 <- data.frame(a=1:3,b=2:4)
vals <- list(5, "s")
nams <- c("x","y")
lapply(list(DF1,DF2,DF3), function(DAT) {
DAT[setdiff(nams, names(DAT))] <- NA
merge(DAT, setNames(vals,nams), by=nams)
})
#[[1]]
#[1] x y
#<0 rows> (or 0-length row.names)
#
#[[2]]
# x y z
#1 5 s s
#2 5 s h
#
#[[3]]
#[1] x y a b
#<0 rows> (or 0-length row.names)