作者celestialgod (天)
看板R_Language
标题Re: [问题] 符合条件就跑出colunm names
时间Mon Sep 21 13:44:57 2015
※ 引述《gbd37 (有够瞎)》之铭言:
: [问题类型]:
: 程式谘询(我想用R 做某件事情,但是我不知道要怎麽用R 写出来)
: [软体熟悉度]:
: 入门(写过其他程式,只是对语法不熟悉)
: [问题叙述]:
: 有个data.frame,我想找出data中有没有1过多或是0过多的情况发生,
: 目前CODE范例是取0.7百分位数&FREQ>5当门槛
: 我想OUTPUT出column names与范例程式码output的结果
: 且没有符合的条件不print出<0 rows> (or 0-length row.names)
: 期望OUTPUT出 :
: Var1 Freq column column.name
: 1 0 7 1 A
: Var1 Freq column column.name
: 2 1 7 3 C
: Var1 Freq column column.name
: 2 1 6 4 D
: Var1 Freq column column.name
: 2 1 6 5 E
: 的结果,储存一个新的data.frame
我把重点用红色圈起来了
主要就是在里面做一个逻辑值的判断就可以解决这个问题
library(data.table)
library(plyr)
library(dplyr)
library(magrittr)
set.seed(100)
dat = data_frame(A=sample(c(0,1), 10, replace = TRUE),
B=sample(c(0,1), 10, replace = TRUE),
C=sample(c(0,1), 10, replace = TRUE),
D=sample(c(0,1), 10, replace = TRUE),
E=sample(c(0,1), 10, replace = TRUE))
dat %>% llply(function(x){
tmp = table(x) %>% {.[-which(. <= quantile(., 0.7))]}
if (is.null(tmp) || length(tmp) == 0)
tmp = rep(NA, 2)
else
tmp %<>% c(as.numeric(names(.)), .)
tmp
}) %>% do.call(rbind,.) %>% data.table(keep.rownames=TRUE) %>%
setnames(c("columnName", "Var", "Freq")) %>% na.omit %>%
mutate(column = match(columnName, names(dat)))
# columnName Var Freq column
# 1: A 0 7 1
# 2: C 1 7 3
# 3: D 1 6 4
# 4: E 1 6 5
llply改成laply就没有column name一并output
只能自己在手动加上去
所以我才没用laply
不然这个用laply直接出来就是matrix了
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 140.109.73.159
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/R_Language/M.1442814301.A.861.html
※ 编辑: celestialgod (140.109.73.159), 09/21/2015 13:51:21
1F:推 gbd37: 我跪 谢 09/22 11:04