R
中你最喜欢的单行内容是什么?
请包含一个简短的伴随示例,并限制每个帖子一个提示。
请注意,;
是作弊。
示例:计算向量x[i] / x[i-1]
,
x
x <- 1:10
Reduce("/", as.data.frame(embed(x, 2)))
(从R-help收集,我忘了谁/何时)
在一些最初的争议之后,编辑:,看起来问题现在重新开放了。
答案 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))