您可以对数据集进行转置,即。 t(df) 将列交换为行,输出将是 matrix(即具有维度属性的向量)。要去除维度并创建真正的向量,您可以使用as.vector 或简单地使用c(连接)。这可用于创建单个列data.frame:
data.frame(C3 = c(t(df)))
或者使用mapply 的另一个选项(由@David Arenburg 提供)。在这里,这个想法再次将列“C1”和“C2”的元素逐个连接起来。
data.frame(C3 = c(mapply(c, df$C1, df$C2)))
要检查它是如何工作的,请尝试Map。这里,list 元素的数量将等于df 的nrow:
Map(`c`, df$C1, df$C2)
数据
df <- structure(list(C1 = c(1L, 1L, 1L), C2 = c(2L, 2L, 2L)), .Names = c("C1",
"C2"), class = "data.frame", row.names = c(NA, -3L))
这里是向量化方法和*applyfamily 之间区别的说明
n <- 1e4
df <- data.frame(C1 = rep(1, n), C2 = rep(2, n))
library(microbenchmark)
microbenchmark(akrun = c(t(df)), David = c(mapply(c, df$C1, df$C2)))
# Unit: microseconds
# expr min lq mean median uq max neval
# akrun 204.608 215.7795 259.9504 265.4155 275.9485 374.741 100
# David 11933.612 12245.7890 13190.8289 12399.0050 13463.8565 30267.502 100