我想将data.table中的一组列修改为因子.如果我事先知道列的名称,我认为这将是直截了当的.
library(data.table)
dt1 <- data.table(a = (1:4), b = rep(c('a','b')), c = rep(c(0,1)))
dt1[,class(b)]
dt1[,b:=factor(b)]
dt1[,class(b)]
Run Code Online (Sandbox Code Playgroud)
但我没有,而是有一个变量名列表
vars.factors <- c('b','c')
Run Code Online (Sandbox Code Playgroud)
我可以毫无问题地将因子函数应用于它们......
lapply(vars.factors, function(x) dt1[,class(get(x))])
lapply(vars.factors, function(x) dt1[,factor(get(x))])
lapply(vars.factors, function(x) dt1[,factor(get(x))])
Run Code Online (Sandbox Code Playgroud)
但我不知道如何重新分配或更新数据表中的原始列.
这失败了......
lapply(vars.factors, function(x) dt1[,x:=factor(get(x))])
# Error in get(x) : invalid first argument
Run Code Online (Sandbox Code Playgroud)
就像这样......
lapply(vars.factors, function(x) dt1[,get(x):=factor(get(x))])
# Error in get(x) : object 'b' not found
Run Code Online (Sandbox Code Playgroud)
NB.我试着在这里提出的答案没有任何运气.
我刚刚升级到R 3.2.1,并且无法再安装devtools包.
我得到以下输出:
install.packages('devtools')
trying URL 'http://cran.ma.imperial.ac.uk/bin/macosx/mavericks/contrib/3.2/devtools_1.8.0.tgz'
Content type 'application/x-gzip' length 324861 bytes (317 KB)
==================================================
downloaded 317 KB
The downloaded binary packages are in
/var/folders/zd/112dtz1x3575n4z10cm7nflw0000gn/T//RtmpzsBSdp/downloaded_packages
Run Code Online (Sandbox Code Playgroud)
加载库:
library('devtools')
Run Code Online (Sandbox Code Playgroud)
loadNamespace出错(j < - i [[1L]],c(lib.loc,.libPaths()),versionCheck = vI [[j]]):没有名为'curl'的包错误:包或命名空间加载'devtools'失败了
我已经阅读了以下文章 - 安装devtools软件包时遇到的问题 - 这似乎有一个Linux(?)的解决方案,但我已经curl
安装在我的系统上,我看不出这对我有什么帮助.
我有一个长形式的data.frame.我想重塑一下,但我关心列的排序.
这是一个玩具的例子.实际上,我会有更多的团体(grp
).
# Minimum working example
mwe <- "grp mean sd label
1 C90 90 19 Heart_rate
2 D20 86 18 Heart_rate
3 H09 80 16 Heart_rate
9 Z89 89 18 Heart_rate"
# Read in the text data
dd <- read.table(text=mwe, header=TRUE)
Run Code Online (Sandbox Code Playgroud)
我试过这个解决方案没有成功.
dcast(setDT(dd), label~grp, value.var=list("mean", "sd"), sep="_" )
label mean_C90 mean_D20 mean_H09 mean_Z89 sd_C90 sd_D20 sd_H09 sd_Z89
1: Heart_rate 90 86 80 89 19 18 16 18
Run Code Online (Sandbox Code Playgroud)
我想是后列label
下令由grp
然后通过mean
和sd …