光滑的one-lineRs

时间:2011-06-05 23:57:39

标签: r

R中你最喜欢的单行内容是什么?

请包含一个简短的伴随示例,并限制每个帖子一个提示。 请注意,;是作弊。

示例:计算向量x[i] / x[i-1]

x
x <- 1:10
Reduce("/", as.data.frame(embed(x, 2)))

(从R-help收集,我忘了谁/何时)

在一些最初的争议之后,

编辑:,看起来问题现在重新开放了。

17 个答案:

答案 0 :(得分:14)

如果您想记录在其名称中创建文件的时间(可能是为了使其唯一,或防止覆盖),请尝试使用此单行函数。

timestamp <- function(format = "%y%m%d%H%M%S")
{
  strftime(Sys.time(), format)
}

用法是,例如,

write.csv(
   some_data_frame, 
   paste("some data ", timestamp(), ".csv", sep = "")
)

答案 1 :(得分:9)

得到奇数或偶数指数。

odds <- function(x) seq_along(x) %% 2 > 0
evens <- function(x) seq_along(x) %% 2 == 0

用法是,例如,

odds(1:5)
evens(1:5)

答案 2 :(得分:6)

从矢量或数据框中删除NaN(每隔一段时间就会产生一些麻烦)(在R-help上找到一些东西)

is.na(x) <- is.na(x)

示例:

> x <- c(1, NaN, 2, NaN, 3, NA)
> is.na(x) <- is.na(x)
> x
[1]  1 NA  2 NA  3 NA

答案 3 :(得分:6)

我经常需要假数据来说明回归问题。而不是

X <- replicate(2, rnorm(100))
y <- X[,1] + X[,2] + rnorm(100)
df <- data.frame(y=y, X=X)

我们可以使用

df <- transform(X <- as.data.frame(replicate(2, rnorm(100))), 
                y = V1+V2+rnorm(100))

生成与结果y相关的两个不相关的预测变量。

答案 4 :(得分:5)

将Excel日期转换为R日期。答案改编自Paul Murrell的代码。

excel_date_to_r_date <- function(excel_date, format)
{
  #excel_date is the number of days since the 0th January 1900.  See
  #http://www.stat.auckland.ac.nz/~paul/ItDT/HTML/node67.html
  strftime(as.Date(as.numeric(excel_date) - 2, origin = "1900-01-01"), format)
}

用法是,例如,

excel_date_to_r_date(40700, "%d-%m-%Y")

答案 5 :(得分:4)

Reduce()是一个新的孩子。可以使用do.call()完成相同的操作,并且更快一点(至少在我的系统上):

do.call("/", as.data.frame(embed(1:10, 2)))

R> do.call("/", as.data.frame(embed(1:10, 2)))
[1] 2.000000 1.500000 1.333333 1.250000 1.200000 1.166667 1.142857 1.125000
[9] 1.111111
R> Reduce("/", as.data.frame(embed(1:10, 2)))
[1] 2.000000 1.500000 1.333333 1.250000 1.200000 1.166667 1.142857 1.125000
[9] 1.111111

答案 6 :(得分:4)

不完全是你所追求的,但在一行中拟合多元线性回归模型是很好的:

lm(y ~ x1 + x2)

答案 7 :(得分:3)

函数汇总数据框中每个变量的缺失数据量。返回一个列表。

propmiss <- function(dataframe) lapply(dataframe,function(x) data.frame(nmiss=sum(is.na(x)), n=length(x), propmiss=sum(is.na(x))/length(x)))

不是单行,但将此信息作为数据框返回更有用。

propmiss <- function(dataframe) {
    m <- sapply(dataframe, function(x) {
        data.frame(
            nmiss=sum(is.na(x)), 
            n=length(x), 
            propmiss=sum(is.na(x))/length(x)
        )
    })
    d <- data.frame(t(m))
    d <- sapply(d, unlist)
    d <- as.data.frame(d)
    d$variable <- row.names(d)
    row.names(d) <- NULL
    d <- cbind(d[ncol(d)],d[-ncol(d)])
    return(d[order(d$propmiss), ])
}

答案 8 :(得分:3)

擦拭平板清除从内存中删除所有对象。

rm(list=ls(all=TRUE))

答案 9 :(得分:2)

多列编辑是我最喜欢的一个。

E.g。将所有数字列更改为字符:

X <- iris
X[id] <- lapply(X[id <- sapply(X, is.numeric)], as.character)

或标准化他们

X[id] <- lapply(X[id <- sapply(X, is.numeric)], scales)

答案 10 :(得分:1)

嗯,不是真正的oneliner,但textConnection很棒!

x <- "1,3
1,a
1,g,4
3,d,6
2,X,1,3
2,K"
read.table(textConnection(x), sep=",", header=FALSE, na.strings="", fill=TRUE)

结果

  V1 V2 V3 V4
1  1  3 NA NA
2  1  a NA NA
3  1  g  4 NA
4  3  d  6 NA
5  2  X  1  3
6  2  K NA NA
> 

答案 11 :(得分:1)

这是从R-help收集的另一个提示(如果记忆由RomainFrançois提供)。

从工作区中删除现有变量:

rm( list = Filter( exists, c("a", "b") ) )

答案 12 :(得分:1)

我会说plyr看一个装满光滑oneliners的包裹!

答案 13 :(得分:1)

我最喜欢的单行内容可以在%in%函数的帮助页面找到,基本上是相反的。

f.wo <- function(x, y) x[!x %in% y]

包装成一个漂亮的小功能,非常方便。 E.g。

R> f.wo(c("a", "b", "c"), "b")
[1] "a" "c"
R> f.wo(1:8, c(2,7))
[1] 1 3 4 5 6 8

答案 14 :(得分:1)

从剪贴板中读取空格分隔数据的功能

read.cb <- function(...) read.table(file="clipboard", ...)

e.g。

# read data from the clipboard with a header
d<-read.cb(T) 

#read data from clipboard without header
d<-read.cb()

答案 15 :(得分:1)

将数据框中的数据列转换为因子变量

的函数
factorcols <- function(d, ...) lapply(d, function(x) factor(x, ...))

E.g。将数据框d中的第1-4列转换为因子变量

d[1:4] <- factorcols(d[1:4])

答案 16 :(得分:1)

返回一个新矩阵,其中原始矩阵的行按列排序:

newmat <- t(apply(orimat, 1, sort))