相关疑难解决方法(0)

将data.frame列从因子转换为字符

我有一个数据框.我们叫他bob:

> head(bob)
                 phenotype                         exclusion
GSM399350 3- 4- 8- 25- 44+ 11b- 11c- 19- NK1.1- Gr1- TER119-
GSM399351 3- 4- 8- 25- 44+ 11b- 11c- 19- NK1.1- Gr1- TER119-
GSM399352 3- 4- 8- 25- 44+ 11b- 11c- 19- NK1.1- Gr1- TER119-
GSM399353 3- 4- 8- 25+ 44+ 11b- 11c- 19- NK1.1- Gr1- TER119-
GSM399354 3- 4- 8- 25+ 44+ 11b- 11c- 19- NK1.1- Gr1- TER119-
GSM399355 3- 4- 8- 25+ 44+ 11b- 11c- 19- NK1.1- Gr1- TER119-
Run Code Online (Sandbox Code Playgroud)

我想连接这个数据框的行(这将是另一个问题).但看: …

r dataframe

329
推荐指数
11
解决办法
55万
查看次数

为什么使用as.factor()而不仅仅是因子()

我最近看到马特Dowle写一些代码as.factor(),特别是

for (col in names_factors) set(dt, j=col, value=as.factor(dt[[col]]))
Run Code Online (Sandbox Code Playgroud)

对这个答案的评论中.

我使用了这个片段,但是我需要明确设置因子级别以确保级别以我想要的顺序出现,所以我不得不改变

as.factor(dt[[col]])
Run Code Online (Sandbox Code Playgroud)

factor(dt[[col]], levels = my_levels)
Run Code Online (Sandbox Code Playgroud)

这让我想到:什么(如果有的话)是使用as.factor()与仅仅的好处factor()

r r-factor

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

使用lapply()优雅地在data.table中分配多个列

我试图通过应用共享函数找出一种优雅的方法来使用:=赋值来一次替换多列data.table.这种情况的典型用法可能是将字符串函数(例如gsub)应用于表中的所有字符列.将data.frame这样做的方式扩展到a 并不困难data.table,但我正在寻找一种与data.table做事方式一致的方法.

例如:

library(data.table)

m <- matrix(runif(10000), nrow = 100)
df <- df1 <- df2 <- df3 <- as.data.frame(m)
dt <- as.data.table(df)
head(names(df))
head(names(dt))

## replace V20-V100 with sqrt

# data.frame approach
# by column numbers
df1[20:100] <- lapply(df1[20:100], sqrt)
# by reference to column numbers
v <- 20:100
df2[v] <- lapply(df2[v], sqrt)
# by reference to column names
n <- paste0("V", 20:100)
df3[n] <- lapply(df3[n], sqrt)

# …
Run Code Online (Sandbox Code Playgroud)

r data.table

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

在data.table中转换*some*列类

我想将data.table cols的子集转换为新类.这里有一个流行的问题(在data.table中转换列类)但是答案创建了一个新对象,而不是在starter对象上运行.

举个例子:

dat <- data.frame(ID=c(rep("A", 5), rep("B",5)), Quarter=c(1:5, 1:5), value=rnorm(10))
cols <- c('ID', 'Quarter')
Run Code Online (Sandbox Code Playgroud)

如何最好地将cols列转换为(例如)一个因子?在普通的data.frame中,你可以这样做:

dat[, cols] <- lapply(dat[, cols], factor)
Run Code Online (Sandbox Code Playgroud)

但这对data.table不起作用,也不适用

dat[, .SD := lapply(.SD, factor), .SDcols = cols]
Run Code Online (Sandbox Code Playgroud)

来自Matt Dowle(2013年12月)的链接问题中的评论表明以下情况很好,但看起来不那么优雅.

for (j in cols) set(dat, j = j, value = factor(dat[[j]]))
Run Code Online (Sandbox Code Playgroud)

目前是否有更好的data.table答案(即更短+不生成计数器变量),或者我应该只使用上面的+ rm(j)

r data.table

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

重新分类数据表中的选择列

我希望使用向量化操作更改数据表中所选变量的类.我是data.table语法的新手,我正在努力学习.我现在的问题是基本的,但它会帮助我更好地理解数据表的思维方式!

这里一个类似的问题!但是,该解决方案似乎与重新分类一列或所有列有关.我的问题对于少数几列来说是独一无二的.

### Load package
require(data.table)

### Create pseudo data
data <- data.table(id     = 1:10,
                   height = rnorm(10, mean = 182, sd = 20),
                   weight = rnorm(10, mean = 160, sd = 10),
                   color  = rep(c('blue', 'gold'), times = 5))

### Reclass all columns
data <- data[, lapply(.SD, as.character)]

### Search for columns to be reclassed
index <- grep('(id)|(height)|(weight)', names(data))

### data frame method
df <- data.frame(data)
df[, index] <- lapply(df[, index], as.numeric)

### Failed attempt to …
Run Code Online (Sandbox Code Playgroud)

r data.table

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

我可以以编程方式更新data.table中的一组列(到因子)的类型吗?

我想将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 r-factor data.table

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

使用R中的data.table将POSIXct列连接到Date列

在以下示例中,有人可以向我解释为什么2015-03-31的日期更改为1034-04-03?

dt1 = data.table(id = c(1,2), date = as.POSIXct("2015-03-31 BST"), key = "id")
dt1
#    id       date
# 1:  1 2015-03-31
# 2:  2 2015-03-31
dt2 = data.table(id = c(1,2), date = as.Date(NA), key = "id")
dt2
#    id date
# 1:  1 <NA>
# 2:  2 <NA>
dt2[dt1, date := i.date]
dt2
#    id       date
# 1:  1 1034-04-03
# 2:  2 1034-04-03
Run Code Online (Sandbox Code Playgroud)

我的目的是让date来自dt1dt2Date格式,而不是POSIXctid(不同id会有不同date …

join r date posixct data.table

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

do.call(namespace:base)和rbindlist(namespace:data.table)不一样

如何让do.call(namespace:base)和rbindlist(namespace:data.table)表现相同.rbindlist消除了因子水平,而do.call则没有.以下显示了该问题

(dataList <- list(data.frame(f1=rep(c("a"), each=1),"c"=rnorm(2),"d"=rnorm(2)),
                      data.frame(f1=rep(c("b"), each=1),"c"=rnorm(2),"d"=rnorm(2))) )

(rbindlist.Data <- rbindlist(dataList)) # combines lists into ONE data.frame same as above
(do.call.Data <- do.call(rbind, dataList))
Run Code Online (Sandbox Code Playgroud)

r data.table

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

标签 统计

r ×8

data.table ×6

r-factor ×2

dataframe ×1

date ×1

join ×1

posixct ×1