我想按因子对数据帧进行子集化.我只想保留高于特定频率的因子水平.
df <- data.frame(factor = c(rep("a",5),rep("b",5),rep("c",2)), variable = rnorm(12))
Run Code Online (Sandbox Code Playgroud)
此代码创建数据框:
factor variable
1 a -1.55902013
2 a 0.22355431
3 a -1.52195456
4 a -0.32842689
5 a 0.85650212
6 b 0.00962240
7 b -0.06621508
8 b -1.41347823
9 b 0.08969098
10 b 1.31565582
11 c -1.26141417
12 c -0.33364069
Run Code Online (Sandbox Code Playgroud)
而且我想降低重复次数少于5次的因子水平.我开发了一个for循环,它正在工作:
for (i in 1:length(levels(df$factor))){
if(table(df$factor)[i] < 5){
df.new <- df[df$factor != names(table(df$factor))[i],]
}
}
Run Code Online (Sandbox Code Playgroud)
但是,存在更快更漂亮的解决方案吗?
给定一个新的会话,执行函数文档中提供的小ggparcoord(.)示例
library(GGally)
data(diamonds, package="ggplot2")
diamonds.samp <- diamonds[sample(1:dim(diamonds)[1], 100), ]
ggparcoord(data = diamonds.samp, columns = c(1, 5:10))
Run Code Online (Sandbox Code Playgroud)
结果如下:
再次,从一个新的会话开始并使用加载的dplyr执行相同的脚本
library(GGally)
library(dplyr)
data(diamonds, package="ggplot2")
diamonds.samp <- diamonds[sample(1:dim(diamonds)[1], 100), ]
ggparcoord(data = diamonds.samp, columns = c(1, 5:10))
Run Code Online (Sandbox Code Playgroud)
结果是:
错误:(列表)对象无法强制输入'double'
需要注意的是顺序库()语句也没有关系.
问题
我需要更大的分析中的dplyr和ggparcoord(.),但这个最小的例子反映了我面临的问题.
版本
UPDATE
将Joran给出的优秀答案包括起来:
答案
Stata有一个非常好的命令,egen这使得计算观察组的统计数据变得容易.例如,可以计算每个组的最大值,平均值和最小值,并将它们作为变量添加到详细数据集中.Stata命令是一行代码:
by group : egen max = max(x)
Run Code Online (Sandbox Code Playgroud)
我从来没有summarise在dplyr包中找到相同的命令,这使得计算每个组的统计数据变得容易,但是我必须运行一个循环来将统计数据与每个观察结果相关联:
library("dplyr")
N <- 1000
tf <- data.frame(group = sample(1:100, size = N, replace = TRUE), x = rnorm(N))
table(tf$group)
mtf <- summarise(group_by(tbl_df(tf), group), max = max(x))
tf$max <- NA
for (i in 1:nrow(mtf)) {
tf$max[tf$group == mtf$group[i]] <- mtf$max[i]
}
Run Code Online (Sandbox Code Playgroud)
有没有人有更好的解决方案?
假设我有一个年整数列表如下:
olap = c(1992, 1993, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2011, 2012, 2013, 2014);
Run Code Online (Sandbox Code Playgroud)
什么是最不复杂和最像R的方式来确定连续年份的最长范围以及开始日期和结束日期?我希望获得:长度:10,开始年份:1997年,结束年份:2006年.
我一直在网上搜索一下这个网站,人们似乎建议在这种情况下使用rle().所以我解决问题的方法如下:
olap_diff_rle = rle(diff(olap));
max_diff_run = max(olap_diff_rle$lengths[olap_diff_rle$values==1]);
idx = cumsum(olap_diff_rle$lengths)[olap_diff_rle$lengths==max_diff_run] + 1;
max_olap_end_year = olap[idx];
max_olap_start_year = olap_end_year - max_diff_run;
max_olap = max_diff_run + 1;
Run Code Online (Sandbox Code Playgroud)
但这看起来非常优雅.必须有一个不那么复杂的方式来做到这一点!?我只想使用base R,所以没有包.我读过一个人也可能会使用类似的东西which(diff()!= 1)来确定休息时间并从那里继续?
我进行了一项研究,回想起来(一个人,一个人学习:-))似乎产生了多层次的数据.现在我正在尝试从宽到长重构数据集,以便我可以使用例如lme4进行分析.
在这样做的过程中,我遇到了一个,嗯,挑战,我之前遇到过几次,但是我从来没有找到一个好的解决方案.这次我再次搜索,但我可能使用错误的关键字 - 或者这个问题比我想象的要少得多.
基本上,在此数据集中,变量名指示收集哪些度量数据.我问参与者评分(率)干预(可能是真的).每次干预都属于6个行为领域之一.此外,参与者对每次干预进行评估,无论是在其自身呈现时,还是与其他干预同时进行,或者与其他两种干预措施同时进行.有三种类型的干预措施,它们都在(t0)之前和之后(t1)进行了评估,并向他们提供了一些信息.
所以,实际上,我有一个可以像这样重新生成的数据帧:
### Elements of the variable names
measurementMomentsVector <- c("t0", "t1");
interventionTypesVector <- c("fear", "know", "scd");
nrOfInterventionsSimultaneouslyVector <- c(1, 2, 3);
behaviorDomainsVector <- c("diet", "pox", "alc", "smoking", "traff", "adh");
### Generate a vector with all variable names
variableNames <-
apply(expand.grid(measurementMomentsVector,
interventionTypesVector,
nrOfInterventionsSimultaneouslyVector,
behaviorDomainsVector),
1, paste0, collapse="_");
### Generate 5 'participants' worth of data
wideData <- data.frame(matrix(rnorm(5*length(variableNames)), nrow=5));
### Assign names
names(wideData) <- variableNames;
### Add unique id variable for every participants
wideData$id <- 1:5;
Run Code Online (Sandbox Code Playgroud)
所以使用 …
我有一个看起来像的训练集
Name Day Area X Y Month Night
ATTACK Monday LA -122.41 37.78 8 0
VEHICLE Saturday CHICAGO -1.67 3.15 2 0
MOUSE Monday TAIPEI -12.5 3.1 9 1
Run Code Online (Sandbox Code Playgroud)
Name是结果/因变量.我转换Name,Area并Day为因素,但我不知道我是否应该为Month和Night,只取整数值1-12和0-1分别.
然后我将数据转换为矩阵
ynn <- model.matrix(~Name , data = trainDF)
mnn <- model.matrix(~ Day+Area +X + Y + Month + Night, data = trainDF)
Run Code Online (Sandbox Code Playgroud)
然后我设置调整参数
nnTrControl=trainControl(method = "repeatedcv",number = 3,repeats=5,verboseIter = TRUE, returnData = FALSE, returnResamp = "all", classProbs = TRUE, …Run Code Online (Sandbox Code Playgroud) 是否有一步一步的手册如何将文档添加到TYPO3扩展?我在存储库中添加了两个扩展,但我也想添加一些文档.在TYPO3存储库的早期阶段,这很容易 - 据我记得,必须将OpenOffice文档添加到扩展中...我发现这个"howto"
我正在使用macOS Sierra,我安装了很多东西:Xcode,MacPorts,Sphinx,......
我做了所有这些pip安装
但是在github.com/marble/typo3-docs-typo3-org-resources的文档目录的_make目录中调用make给了我以下内容
错误:
sphinx-build -b html -d build/doctrees -c.-a -E -w ./_not_versioned/warnings.txt .. build/html运行Sphinx v1.5.1
发生异常:文件"conf.py",第24行,导入t3SphinxThemeRtd ImportError:没有名为t3SphinxThemeRtd的模块
如果要向开发人员报告问题,则完整的回溯已保存在/tmp/sphinx-err-bGi8t6.log中.如果是用户错误,请另外报告,以便下次可以提供更好的错误消息.可以通过https://github.com/sphinx-doc/sphinx/issues在跟踪器中提交错误报告 .谢谢!
所以虽然我用pip命令添加了模块t3SphinxThemeRtd但是找不到它?
是否有一种简单的方法来添加文档?我认为这个复杂的程序会阻止许多开发人员在他们的扩展中添加文档!
这只是一个非常简单的问题,但我只是无法从网络和书籍中找到合适的函数来使用。
这是我从这里的一篇文章中得到的一个例子。
df <- data.frame(sex = c('F', 'M', 'F', 'M', 'M', 'M', 'F', 'F'),
married = c(1,1,1,1,0,0,1,1),
pens = c(0, 1, 1, 1, 1, 1, 0, 0),
weight = c(1.12, 0.55, 1.1, 0.6, 0.23, 0.23, 0.66, 0.67))
d.s <- svydesign(ids=~1, data=df, weights=~weight)
Run Code Online (Sandbox Code Playgroud)
我想计算百分比变量,例如已婚,并计算标准误差?
我还想对已婚和钢笔进行交叉表并获得结果比例的标准误差?
我怎么做?
我尝试了 svymean 但它会将数值视为整数而不是因子。
我希望能够在渲染数据表时获得"更细"的行DT(即减小该高度)
options(digits.secs=6)
library(data.table)
d = data.table(x = 1:10,time = as.POSIXct('2015-03-23 12:00:00.123'))
library(DT)
datatable(d)
Run Code Online (Sandbox Code Playgroud)
我想通过选择一组的最后观察打开第一个表到第二a和b,第一个观察c,和每个观测的组d和e,和f,检查是否有有效日期存在和使用日期.
表格1:
ID a b c d e f
1 10 100 1000 10000 100000 ?
1 10 100 1001 10010 100100 5/07/1977
1 11 111 1002 10020 100200 5/07/1977
2 22 222 2000 20000 200000 6/02/1980
3 33 333 3000 30000 300000 20/12/1978
3 33 333 3001 30010 300100 ?
4 40 400 4000 40000 400000 ?
4 40 400 4001 40010 400100 ?
4 40 400 …Run Code Online (Sandbox Code Playgroud)