我想重写 this question 的前几行,而且我不明白为什么我的 sapply
行不起作用。
我想转动这些线:
cols <- sample(c(1:5), 1)
label <- rep(paste0("label ", seq(from=1, to=10)))
mydata <- data.frame(label)
for (i in 1:cols) {mydata[,i+1] <- sample(c(1:10), 10)}
进入:
cols <- sample(c(1:5), 1)
mydata <- data.frame(rep(paste0("label ", seq(1,10))))
sapply(1:cols, function(x) { mydata[,(x+1)] <- sample(c(1:10), 10) } )
但由于某种原因,sapply
行给了我一个新列将在现有列后留下孔
错误,我不知道为什么。
我也尝试过
sapply(1:cols, function(x) { mydata[,(x+1)] <- sample(c(1:10), 10); mydata } )
Map(function(x, mydata1) {mydata1[,(x+1)] <- sample(c(1:10), 10)}, x = 1:cols, mydata1 = mydata)
最佳答案
我无法确定您的代码不起作用的原因,但这与运行 sapply
之前未定义列有关。因此,如果您事先定义 data.frame
,它就可以工作
cols <- sample(c(1:5), 1)
mydata <- data.frame(matrix(rep(0, 10*(cols+1)), ncol = cols+1))
mydata[, 1] <- rep(paste0("label ", seq(1,10)))
sapply(1:cols, function(x) {
mydata[, x+1] <- sample(c(1:10), 10) } )
编辑:
您可以使用以下代码代替
cols <- sample(c(1:5), 1)
mydata <- data.frame(rep(paste0("label ", seq(1,10))),
sapply(1:cols, function(x) {sample(c(1:10), 10) } ))
关于r - 应用数据框列分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49457747/