保留R中的某些列

时间:2016-03-02 23:37:31

标签: r subset lapply sapply

我有一个数据框列表,我想循环遍历它们并保留与某些列名称的某些值匹配的行,我想传递这些列名称的向量及其相应的值。

示例:

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,)

我很感激帮助。

2 个答案:

答案 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.framelapply包中的两个函数根据您所需的输出进行选择和过滤。 dplyr对感兴趣的列进行子集,Select选择符合某些逻辑标准/条件的行。

filter

编辑:我现在指定要保留的列,以及我在子集中接受的值。

答案 1 :(得分:1)

这样的事情,依靠merge来保留行。如果要匹配许多变量,可能比编写选择语句更容易。我添加了一个额外的数据集,其中既没有xy变量,也显示了这个问题的原因。

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)