小编Jaa*_*aap的帖子

优雅的方式从数据框中删除稀有因子水平

我想按因子对数据帧进行子集化.我只想保留高于特定频率的因子水平.

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)

但是,存在更快更漂亮的解决方案吗?

r subset

9
推荐指数
3
解决办法
4424
查看次数

dplyr掩盖GGally并打破ggparcoord

给定一个新的会话,执行函数文档中提供的小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'

需要注意的是顺序库()语句也没有关系.

问题

  1. 代码示例有问题吗?
  2. 有没有办法克服这个问题(通过一些命名空间函数)?
  3. 或者这是一个错误?

我需要更大的分析中的dplyrggparcoord(.),但这个最小的例子反映了我面临的问题.

版本

  • R @ 3.2.3
  • dplyr @ 0.4.3
  • GGally @ 1.0.1
  • ggplot @ 2.0.0

UPDATE

将Joran给出的优秀答案包括起来:

答案

  1. 代码示例实际上是错误的,因为ggparcoord(.)期望data.frame不是钻石数据集给出的tbl_df(如果加载了dplyr).
  2. 问题是由强迫的解决tbl_df到 …

r ggplot2 dplyr parallel-coordinates ggally

9
推荐指数
1
解决办法
411
查看次数

是否有相当于Stata的egen功能?

Stata有一个非常好的命令,egen这使得计算观察组的统计数据变得容易.例如,可以计算每个组的最大值,平均值和最小值,并将它们作为变量添加到详细数据集中.Stata命令是一行代码:

by group : egen max = max(x)
Run Code Online (Sandbox Code Playgroud)

我从来没有summarisedplyr包中找到相同的命令,这使得计算每个组的统计数据变得容易,但是我必须运行一个循环来将统计数据与每个观察结果相关联:

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)

有没有人有更好的解决方案?

r stata

8
推荐指数
1
解决办法
3807
查看次数

如何识别列表中连续年份的最长范围以及开始和结束日期?

假设我有一个年整数列表如下:

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)来确定休息时间并从那里继续?

r

8
推荐指数
1
解决办法
240
查看次数

如何使用"四重嵌套"将宽数据帧转换为多级结构的长数据帧?

我进行了一项研究,回想起来(一个人,一个人学习:-))似乎产生了多层次的数据.现在我正在尝试从宽到长重构数据集,以便我可以使用例如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)

所以使用 …

r reshape dataframe reshape2

8
推荐指数
1
解决办法
248
查看次数

错误:在Caret中使用Train时,nrow(x)== n不为TRUE

我有一个看起来像的训练集

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,AreaDay为因素,但我不知道我是否应该为MonthNight,只取整数值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)

r neural-network dataframe r-caret

8
推荐指数
1
解决办法
1万
查看次数

如何向TYPO3 Extension添加文档

是否有一步一步的手册如何将文档添加到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但是找不到它?

是否有一种简单的方法来添加文档?我认为这个复杂的程序会阻止许多开发人员在他们的扩展中添加文档!

documentation typo3

8
推荐指数
2
解决办法
299
查看次数

如何使用调查包计算比例?

这只是一个非常简单的问题,但我只是无法从网络和书籍中找到合适的函数来使用。

这是我从这里的一篇文章中得到的一个例子。

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 但它会将数值视为整数而不是因子。

r survey

8
推荐指数
3
解决办法
1万
查看次数

如何减少DT数据表中的行高

我希望能够在渲染数据表时获得"更细"的行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)

在此输入图像描述

r shiny dt

8
推荐指数
1
解决办法
3878
查看次数

选择第n个观察值并使用data.table按组进行求和

我想通过选择一组的最后观察打开第一个表到第二ab,第一个观察c,和每个观测的组de,和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)

r data.table

8
推荐指数
1
解决办法
405
查看次数