r - R 中的长到宽多个变量

标签 r data.table reshape dcast

将长数据转换为宽数据时,如何在 reshape 中向 timevar argumnet 提供多列

`reshape(DT, idvar="Cell", timevar = "n1", direction="wide")`

如示例timevar=c("n1","n2"....)

DT<-data.table(Cell = c("A","A","B","B"), n1=c("x","y","y","a"), n2=c("t","x","x","z"))

   Cell n1 n2
1:    A  x  t
2:    A  y  x
3:    B  y  x
4:    B  a  z

但我需要如下输出:

Cell  n1    n2  n3  n4
A      x    y   t   NA
B      x    y   a   z

输出的 n1、n2、n3 列中的元素顺序并不重要。仅需要 n1 和 n2 列中的唯一元素。另外,我的实际 DT 中有多个列,例如 n1、n2、n3、、、n

最佳答案

这是一个粗略的概念,似乎可以达到预期的结果。

foo <- function(x, y, n) {
  l <- as.list(unique(c(x, y)))
  if (length(l) < n) l[(length(l)+1):n] <- NA_character_
  l
}


DT[, foo(n1, n2, 4), Cell]

#    Cell V1 V2 V3   V4
# 1:    A  x  y  t <NA>
# 2:    B  y  a  x    z

# Set the names by reference
setnames(DTw, c("Cell", paste0("n", 1:4)))

关于r - R 中的长到宽多个变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52717865/

相关文章:

r - 子集列表,保留名称

r - 将迷你图添加到表中

删除组中带有 NA 的行,假设该组包含至少一个非 NA 值

r - 通过两列和第三列的条件制作一列

R data.table 选择 2 继续行来创建新表

r - 如何在 R 中分几步收集列而不丢失分组

python - 在keras中 reshape 数组

r - R 中的非线性最小二乘法 - Levenberg Marquardt 以拟合 Heligman Pollard 模型参数

r - 字符串拆分为列表 R

r - 想要将唯一值转换为第一/第二/第三变量