我有以下数据:
rand.sum <- function(n){
x <- sort(runif(n-1))
c(x,1) - c(0,x)
}
M <- t(replicate(8,rand.sum(8))) # data frame with probabilities
Test1 <- as.data.frame(t(replicate(1, rand.sum(8))))
Test2 <- as.data.frame(t(replicate(1, rand.sum(8))))
Test <- rbind(Test1,Test2) # Test data
ID1 <- c("ID1")
ID2 <- c("ID2")
ID <- rbind(ID1,ID2) #ID's
data <- cbind(ID,Test)
现在在令人敬畏的社区的帮助下,我有以下应用功能:
gemeinden_new <- lapply(1:dim(Test)[1], function(z)
as.data.frame(
matrix(sapply(1:8, function(i) sum(data[z,2:9] * M[,i])),
nrow=1, ncol=8)
))
现在我想添加一个新列并根据df“data”中的数据填充它。
我提出了以下解决方案:
library(tibble)
gemeinden_new <- lapply(gemeinden_new, function(x){
add_column(x, gemeindeschluessel = 0, .before = 1)
})
for(i in 1:dim(Test)[1]) {
z <- i
gemeindeschluessel <- paste(data[z,1])
gemeinden_new[[z]][z,1] <- gemeindeschluessel
}
虽然这有效但它不是很优雅,因为我正在使用大型数据集,我想解决for循环问题。是否有可能使用lapply重写for循环?我无法这样做。
最终列表解决方案应如下所示:
# $ID1
# gemeindeschluessel V1 V2 V3 V4 V5 V6 V7 V8
# 1 ID1 0.0598796 0.1526457 0.08604147 0.2314867 0.06307882 0.2047462 0.07962943 0.122492
# $ID2
# gemeindeschluessel V1 V2 V3 V4 V5 V6 V7 V8
# 1 ID2 0.1385492 0.1047066 0.06278719 0.1710685 0.09209054 0.2519348 0.06434532 0.1145178