相关疑难解决方法(0)

如何制作一个很好的R可重复的例子

在与同事讨论性能,教学,发送错误报告或在邮件列表上搜索指导时,以及在Stack Overflow上,通常会询问可重复的示例并始终提供帮助.

您有什么建议创建优秀示例的提示?如何以文本格式粘贴中的数据结构?您还应该包含哪些其他信息?

在另外还有其他招数来使用dput(),dump()structure()?你什么时候应该包括library()require()声明?其中保留字应避免一个,此外c,df,data等?

怎样才能成为一位伟大的重复的例子?

r r-faq

2474
推荐指数
23
解决办法
28万
查看次数

清理因子水平(折叠多个级别/标签)

清理包含需要折叠的多个级别的因子的最有效(即有效/适当)方法是什么?也就是说,如何将两个或多个因子级别组合成一个.

这是一个示例,其中"是"和"Y"这两个级别应折叠为"是","否"和"N"折叠为"否":

## Given: 
x <- c("Y", "Y", "Yes", "N", "No", "H")   # The 'H' should be treated as NA

## expectedOutput
[1] Yes  Yes  Yes  No   No   <NA>
Levels: Yes No  # <~~ NOTICE ONLY **TWO** LEVELS
Run Code Online (Sandbox Code Playgroud)

一个选择当然是在手工使用sub和朋友之前清理琴弦.

另一种方法是允许重复标签,然后丢弃它们

## Duplicate levels ==> "Warning: deprecated"
x.f <- factor(x, levels=c("Y", "Yes", "No", "N"), labels=c("Yes", "Yes", "No", "No"))

## the above line can be wrapped in either of the next two lines
factor(x.f)      
droplevels(x.f) 
Run Code Online (Sandbox Code Playgroud)

但是,有更有效的方法吗?


虽然我知道levels …

r factors r-faq

53
推荐指数
5
解决办法
3万
查看次数

什么是R中的替换功能?

我搜索了一个参考,以了解R中的替换函数,但我还没有找到.我试图理解R中替换函数的概念.我有下面的代码,但我不明白它:

"cutoff<-" <- function(x, value){
 x[x > value] <- Inf
 x
 }
Run Code Online (Sandbox Code Playgroud)

然后我们用以下方式调用cutoff:

 cutoff(x) <- 65
Run Code Online (Sandbox Code Playgroud)

谁能解释R中的替换功能是什么?

r

48
推荐指数
3
解决办法
6085
查看次数

在R中对因子中的2个级别进行分组

我有一列数据是A,B和C级别的因素,我有兴趣将这些级别中的两个组合成一个因子,所以它会变成A和B,B = B和C,或者可能是新的变量A和D,D = B和C.我可以通过使用if语句循环遍历列来提供大量方法来实现这一点,但我觉得应该有一个更优雅的方法,我想知道是否有人可以指出我正确的方向.

r

45
推荐指数
2
解决办法
6万
查看次数

使用'['方括号作为R中lapply的函数

我已经看到lapplyR中使用的函数从矩阵列表中的矩阵中提取元素.

例如,我有一个3(2x2)矩阵的列表,我想从这3个矩阵中的每一个中提取元素[1,2].

代码:list1 = lapply(mylist, '[', 1,2)工作正常.它返回包含这3个元素的列表.

我正在努力研究这是做什么的.谷歌没有帮助和使用?'['R的帮助不是太解释.我不知道'['R中的函数是怎么样的,所以代码不直观.

r

29
推荐指数
2
解决办法
9733
查看次数

`names(df [1])< - `和`names(df)[1] < - `之间的区别

考虑以下:

df <- data.frame(a = 1, b = 2, c = 3)
names(df[1]) <- "d" ## First method
##  a b c
##1 1 2 3

names(df)[1] <- "d" ## Second method
##  d b c
##1 1 2 3
Run Code Online (Sandbox Code Playgroud)

这两种方法都没有返回错误,但第一次没有更改列名,而第二次没有.

我认为它与我只在一个子集上运行的事实有关df,但为什么,例如,以下工作正常呢?

df[1] <- 2 
##  a b c
##1 2 2 3
Run Code Online (Sandbox Code Playgroud)

r dataframe

23
推荐指数
1
解决办法
1606
查看次数

用于多个类别的ifelse样式重新编码的习语

我经常遇到这种情况,我认为必须有一个很好的成语.假设我有一个包含一系列属性的data.frame,包括"product".我还有一把钥匙,可以将产品转化为品牌+尺寸.产品代码1-3是Tylenol,4-6是Advil,7-9是拜耳,10-12是Generic.

什么是最快的(就人类时间而言)编码方式?

ifelse如果有3个或更少的类别,我倾向于使用嵌套的;如果有超过3个类型,则键入数据表并将其合并.任何更好的想法?Stata有一个非常漂亮的recode命令,虽然我相信它会促进数据代码混合有点过分.

dat <- structure(list(product = c(11L, 11L, 9L, 9L, 6L, 1L, 11L, 5L, 
7L, 11L, 5L, 11L, 4L, 3L, 10L, 7L, 10L, 5L, 9L, 8L)), .Names = "product", row.names = c(NA, 
-20L), class = "data.frame")
Run Code Online (Sandbox Code Playgroud)

r recode r-factor

17
推荐指数
6
解决办法
2519
查看次数

R语言的作业

我想知道如何在R语言中进行赋值.

考虑以下R shell会话:

> x <- c(5, 6, 7)
> x[1] <- 10
> x
[1] 10 6 7
>
Run Code Online (Sandbox Code Playgroud)

我完全理解.创建向量(5,6,7)并将其绑定到符号"x".之后,'x'会反弹到新的向量(10,6,7),因为向量是不可变的数据结构.

但这里发生了什么:

> c(4, 5, 6)[1] <- 10
Error in c(4, 5, 6)[1] <- 10 :
  target of assignment expands to non-language object
>
Run Code Online (Sandbox Code Playgroud)

或者在这里:

> f <- function() c(4, 5, 6)
> f()[1] <- 10
Error in f()[1] <- 10 : invalid (NULL) left side of assignment
>
Run Code Online (Sandbox Code Playgroud)

在我看来,只能为命名数据结构(如'x')赋值.

我问的原因是因为我试图实现R语言核心,我不确定如何处理这样的任务.

提前致谢

r variable-assignment

14
推荐指数
3
解决办法
6673
查看次数

在r中使用带有替换函数的data.table

我今天遇到了以下问题,我想知道是否有更好的方法来完成我想要做的事情.

假设我有以下data.table(只是每小时时间戳):

library(data.table)
tdt <- data.table(Timestamp = seq(as.POSIXct("1980-01-01 00:00:00"), as.POSIXct("2015-01-01 00:00:00"), '1 hour'))

> tdt
                  Timestamp
     1: 1980-01-01 00:00:00
     2: 1980-01-01 01:00:00
     3: 1980-01-01 02:00:00
     4: 1980-01-01 03:00:00
     5: 1980-01-01 04:00:00
    ---                    
306813: 2014-12-31 20:00:00
306814: 2014-12-31 21:00:00
306815: 2014-12-31 22:00:00
306816: 2014-12-31 23:00:00
306817: 2015-01-01 00:00:00
Run Code Online (Sandbox Code Playgroud)

我的目标是将时间戳的分钟更改为10分钟.

我知道我可以用:

library(lubridate)
minute(tdt$Timestamp) <- 10
Run Code Online (Sandbox Code Playgroud)

但这并没有利用数据表的超快速度(我需要).我的笔记本电脑上有:

> system.time(minute(tdt$Timestamp) <- 10)
   user  system elapsed 
  11.29    0.16   11.45 
Run Code Online (Sandbox Code Playgroud)

所以,我的问题是:我们可以在数据表语法中以某种方式使用替换函数,以便它可以使用我想要data.table的速度吗?如果答案是否定的,data.table那么快速完成此任务的任何其他解决方案都是可以接受的.

如果你想知道我尝试的其中一件事是:

tdt[, Timestamp2 := minute(Timestamp) <- 10]
Run Code Online (Sandbox Code Playgroud)

这不起作用.

预期输出(但使用数据表语法): …

r data.table

12
推荐指数
2
解决办法
373
查看次数

如何保持`[<-`无副作用?

我刚刚发现它`[<-`可能具有破坏性的副作用,或者取决于它给出的参数.

x <- 1:5
x
# [1] 1 2 3 4 5
`[<-`(x, 1:5, 1)
# [1] 1 1 1 1 1
x
# [1] 1 2 3 4 5  # ? last application of `[<-` was non-destructive
`[<-`(x, 1:5, TRUE)
# [1] 1 1 1 1 1
x
# [1] 1 1 1 1 1  # ? the last application of `[<-` had a destructive side-effect
Run Code Online (Sandbox Code Playgroud)

问:是否有一个普遍可靠地防止破坏性的行为,或反对它至少后卫呢?(简而言之,`[<-`完全避免.)


笔记

  1. 我无法在文档( …

r side-effects

9
推荐指数
0
解决办法
97
查看次数