小编Rob*_*ob 的帖子

使用T&F代替TRUE&FALSE有什么问题吗?

我注意到,使用TF替代TRUE,并FALSE在R的功能和使我有同样的结果.当然,T并且F更简洁,但我看到TRUE并且FALSE更频繁地使用.

我想知道两者之间是否有任何区别?使用T和有什么问题F吗?

r r-faq

24
推荐指数
1
解决办法
875
查看次数

创建数字序列,不包括某些数字

我想创建一个1:85的序列,但不包括seq(1,85,5)中的数字.像这样:

2 3 4 5 7 8 9 10 12 13 etc..
Run Code Online (Sandbox Code Playgroud)

在R中这样做的有效方法是什么?

非常感谢!

r sequence

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

将(几乎)工作区中的所有对象存储在列表中

假设我的工作空间(全局环境)中有很多对象,我希望将大多数对象存储在列表中.这是一个简化的例子:

# Put some objects in the workspace
A <- 1
B <- 2
C <- 3
Run Code Online (Sandbox Code Playgroud)

我想将对象A和C存储在列表中.当然,我可以明确地做到这一点:

mylist <- list(A,C)
Run Code Online (Sandbox Code Playgroud)

但是,当工作空间中的对象数量非常大时,这将变得相当麻烦.因此,我想以不同的方式做到这一点并尝试以下方面:

mylist <- list(setdiff(ls(),B))
Run Code Online (Sandbox Code Playgroud)

但这显然不是我想要的,因为它只存储工作区中对象的名称.

有关如何做到这一点的任何建议?

非常感谢!

workspace global r list

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

在data.frame中查找最常见的值组合

我想在data.frame中找到最常见的值组合.

这是一些示例数据:

dat <- data.frame(age=c(50,55,60,50,55),sex=c(1,1,1,0,1),bmi=c(20,25,30,20,25))
Run Code Online (Sandbox Code Playgroud)

在这个例子中,我要找的结果是age = 55,sex = 1和bmi = 25的组合,因为这是列值的最常见组合.

我的真实数据有大约30000行和20列.在30000个观测值中找到这20个值的最常见组合的有效方法是什么?

非常感谢!

combinations r dataframe

6
推荐指数
1
解决办法
4003
查看次数

如何将向量中的值复制到向量中的下一个位置

我有一个看起来像这样的矢量:

c(0.5,0,0,0,0,0.7,0,0,0,0,0.4,0,0,0,0)
Run Code Online (Sandbox Code Playgroud)

假设我想将位置1,6和11(非0的位置)的值复制到该特定值之后的四个位置,以使向量看起来像这样:

c(0.5,0.5,0.5,0.5,0.5,0.7,0.7,0.7,0.7,0.7,0.4,0.4,0.4,0.4,0.4)
Run Code Online (Sandbox Code Playgroud)

我怎么能在R中做到最好?

非常感谢!

r vector

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

麻烦传递参数在自己的函数内运行

我正在编写一个函数,我想将一些参数传递给crrstep-function('crrstep'包),但我遇到了一个问题:当我在crrstep中输入时,我的函数中的参数'event'无法识别.我想crrstep看起来与我想要的环境不同,但即使经过几个小时的网络搜索解决方案,我似乎也无法弄清楚如何解决这个问题(我在编程方面经验不足......) .任何帮助将不胜感激!

这是一些模拟数据(来自crrstep文档的调整示例)和我的代码示例:

n <- 500
ftime <- rexp(n)
fstatus <- sample(0:2,n,replace=TRUE)
testdata <- matrix(runif(8*n),nrow=n)
testdata <- cbind(ftime,fstatus,testdata)
dimnames(testdata)[[2]] <- c('ftime','fstatus','x1','x2','x3','x4','x5','x6','x7','x8')
testdata <- as.data.frame(testdata)
formula1 <- ftime ~ 1 + x1 + x2 + x3 + x4 + x5 + x6 + x7 + x8
rm(fstatus,ftime,n)

test.fun <- function(x,data,event){
require(crrstep)
select.mod<- crrstep(formula=x,,etype=event, failcode=1, cencode=0,data=data, 
                   direction = "backward", criterion = "AIC", crr.object = TRUE, 
                   trace = FALSE)
#Rest of function omitted for now
print(select.mod)
}

#Test
test.fun(x=formula1,data=testdata,event=fstatus) 
#I get: Error in …
Run Code Online (Sandbox Code Playgroud)

environment r function argument-passing

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

在data.frame中创建具有最低值的新列

我有一个像这样的data.frame:

data <- data.frame(A=c(1,3,5),B=c(4,3,6),C=c(2,2,8),D=c(3,3,4))

  A B C D 
  1 4 2 3 
  3 3 2 3 
  5 6 8 4 
Run Code Online (Sandbox Code Playgroud)

现在我想创建新的变量"E",这是列A,B和C的最低值.所以data.frame现在看起来像这样:

 A B C D E
 1 4 2 3 1
 3 3 2 3 2
 5 6 8 4 5
Run Code Online (Sandbox Code Playgroud)

我可以使用for循环来做到这一点:

for (i in 1:nrow(data)) {
  data$E[i] <- min(data[i,c("A","B","C")])
}
Run Code Online (Sandbox Code Playgroud)

但我想知道这是否可以做得更好(效率更高)?

非常感谢!

r min

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

将字符转换为日期

我有一个日期的矢量,格式如下:

 dates <- c("01AUG2006","01DEC2006","01JUN2006","01MAY2007")
Run Code Online (Sandbox Code Playgroud)

要将此向量转换为类的对象Date,我编写了此函数:

convert2Date <- function(x) {
  require(car)
  d <- substr(x,0,2)
  m.text <- substr(x,3,5)
  m <- Recode(m.text, "'JAN'=1 ;'FEB'=2;'MAR'=3;'APR'=4;'MAY'=5;'JUN'=6; 
                       'JUL'=7;'AUG'=8;'SEP'=9;'OCT'=10;'NOV'=11;'DEC'=12")
  y <- substr(x,6,9)
  out <- as.Date(paste(d,m,y,sep="/"),"%d/%m/%Y")
  out
}
Run Code Online (Sandbox Code Playgroud)

使用示例dates变量:

test <- convert2Date(dates)
[1] "2006-08-01" "2006-12-01" "2006-06-01" "2007-05-01"
class(test)
[1] "Date"
Run Code Online (Sandbox Code Playgroud)

这可行,但它看起来有点麻烦,只适用于这种特定的格式.由于这可能是一个常见问题,因此必须有一种更简单,更通用的方法.有人建议吗?非常感谢!

r date

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

如何在函数内打印空白行?

我想写一个函数来打印一些输出,其间有空行.使用例如surv:::print.coxph,我看到这可以使用cat("\n").但是,当我在一个函数中尝试时,只有第一个cat("\n")给出一个空行作为输出,而第二个没有.这是一个例子:

prnt.test <- function(x){
  cat("\n")
  cat(x)
  cat("\n")
  cat(x)
}

prnt.test(x="test")

# Output:

test
test
Run Code Online (Sandbox Code Playgroud)

关于如何在两者中打印空白行的任何想法test

(我在Windows下使用RStudio版本0.98.501,R版本3.0.2:平台:i386-w64-mingw32/i386(32位))

非常感谢!

printing r function cat

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

ifelse语句有很多类别

我有一个数字看起来像这样的向量:c(52.2,76.3,16.1,85.8).我想确定seq(15,90,5)每个值中的哪个区间,并创建一个带有数字的新向量,指示特定的区间/类别.

以下功能有效,但看起来相当麻烦,所以希望有人可以帮助我提高效率/简洁性.

testfun <- function(x){
ifelse(x>=15 & x<20, 1, ifelse(x>=20 & x<25, 2, ifelse(x>=25 & x<30, 3, 
ifelse(x>=30 & x<35, 4, ifelse(x>=35 & x<40, 5, ifelse(x>=40 & x<45, 6, 
ifelse(x>=45 & x<50, 7, ifelse(x>=50 & x<55, 8, ifelse(x>=55 & x<60, 9, 
ifelse(x>=60 & x<65, 10, ifelse(x>=65 & x<70, 11, ifelse(x>=70 & x<75, 12,
ifelse(x>=75 & x<80, 13, ifelse(x>=80 & x<85, 14, ifelse(x>=85 & x<90, 15, 
ifelse(x>=85 & x<90, 16, NA))))))))))))))))}

> testfun(c(52.2,76.3,16.1,85.8))
[1]  8 13  1 …
Run Code Online (Sandbox Code Playgroud)

if-statement r sequence

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

使用多行中的值将函数应用于多行

我在R中创建了以下简单函数:

fun    <- function(a,b,c,d,e){b+(c-a)*((e-b)/(d-a))}
Run Code Online (Sandbox Code Playgroud)

我想将此函数应用于data.frame类似于:

> data.frame("x1"=seq(55,75,5),"x2"=round(rnorm(5,50,10),0),"x3"=seq(30,10,-5))
  x1 x2 x3
1 55 51 30
2 60 45 25
3 65 43 20
4 70 57 15
5 75 58 10
Run Code Online (Sandbox Code Playgroud)

我想应用于fun每个单独的行来创建一个新变量x4,但现在是困难的部分(对我来说至少......):对于参数d和e我想使用值x2x3下一行.因此对于示例的第一行意味着:fun(a=55,b=51,c=30,d=45,e=25).我知道我可以用来mapply()为每一行应用一个函数,但我不知道如何告诉mapply它应该使用下一行的一些值,或者我是否应该寻找一种不同的方法mapply()

提前谢谢了!

r apply

0
推荐指数
1
解决办法
1359
查看次数