我在R上首次亮相,我必须分析一个大数据库。由于我必须对相同的行执行不同的函数,我想使用循环。所以我做了一个3列矩阵,在第一列,我想要给输出的名称,在我将使用的表的第二个,在第三列我将与它进行比较。它看起来像这样:
my_data <- read_excel(.../my_data.xlxs, sheet=sheet1, coltypes=c("date". "text", ..., "text"))
thingstoanalyse1 <- my_data[ which(my_data$columnA=='thistext'), ]
result_tta1 <- thingstoanalyse1[c("columnA", "columnB", "columnC", ..., "columnZ")]
以及从my_data中提取的许多其他表。然后我创建了这个矩阵:
datamatrix <- matrix(data=c("name1", "name2", ..., "nameX", "result_tta1",
"result_tta2", ..., "result_ttaX","thingstoanalyse1$columnA",
"thingstoanalyse2$columnB", ...
"thingstoanalyseX$columnC"),
nrow=alot, ncol=3)
这个例子简单明了,有很多交叉的东西(也许是一个带有thinkstoanalyse2的result_tta5的行,并不总是有相同的决定因素。)
我的目标是使用循环,例如像
这样的循环lapply(datamatrix, function(k) k_tbl = lapply(l) function(x) table(m, x))
其中k将是我的矩阵的第一列(用于命名输出),l是第二列上的一列但与k在同一行上(表示它必须在哪个表中检查)和第三列但是在同一行而不是k和l(说哪个)。 (我简化了我想用“桌子”做的函数的内部,以帮助可视化事物。)
如果我能够找到如何编写循环来说明如何获取良好的值,那么我将只能使用一个公式来编码所有表,然后使用复制粘贴,只需更改里面的公式做同样的事情来获取我的情节,然后获得统计测试结果等......
但遗憾的是,我自己找不到办法。我可以将k,l和m放在一个表中而不是矩阵中,如果它可以提供帮助,或者以其他方式列出它们,但我只是迷路了,找不到有用的东西或我能理解的幅。
示例:
my_data <- data.frame(A = sample(letters[1:4], 20, replace = TRUE),
B = sample(letters[1:4], 20, replace = TRUE),
C = sample(letters[1:4], 20, replace = TRUE),
D = sample(letters[1:4], 20, replace = TRUE),
R1 = sample(letters[6:8], 20, replace = TRUE),
R2 = sample(letters[6:8], 20, replace = TRUE))
thingstoanalyse1 <- my_data[which(my_data$A=='a'), ]
thingstoanalyse2 <- my_data[which(my_data$C=='b'), ]
thingstoanalyse3 <- my_data[which(my_data$A=='b'), ]
result_tta1 <- thingstoanalyse1[c("R1", "R2")]
result_tta2 <- thingstoanalyse2[c("R1", "R2")]
result_tta3 <- thingstoanalyse3[c("R1", "R2")]
datamatrix <- matrix(data=c("result1", "result2", "result3", "result4",
"result5", "result_tta1", "result_tta2",
"result_tta3", "result_tta3", result_tta3",
"thingstoanalyse1$A", "thingstoanalyse$C",
"thingstoanalyse3$A", "thingstoanalyse3$B",
"thingstoanalyse3$C"),
nrow=5, ncol=3)
我的目标是获得这样的等式:
lapply(result_tta1, function(x)
cbind(prop.table(table(thingstoanalyse1$A, x), 1),
margin.table(table(thingstoanalyse1$A, x), 1),
margin.table(table(thingstoanalyse1$A, x)))) ->
result1_tbl
lapply(result_tta2, function(x)
cbind(prop.table(table(thingstoanalyse2$C, x), 1),
margin.table(table(thingstoanalyse2$C, x),1),
margin.table(table(thingstoanalyse2$C, x)))) ->
result2_tbl
lapply(result_tta3, function(x)
cbind(prop.table(table(thingstoanalyse3$A, x), 1),
margin.table(table(thingstoanalyse3$A, x), 1),
margin.table(table(thingstoanalyse3$A, x)))) ->
result3_tbl
lapply(result_tta3, function(x)
cbind(prop.table(table(thingstoanalyse3$B, x), 1),
margin.table(table(thingstoanalyse3$B, x), 1),
margin.table(table(thingstoanalyse3$B, x)))) ->
result4_tbl
lapply(result_tta3, function(x)
cbind(prop.table(table(thingstoanalyse3$C, x), 1),
margin.table(table(thingstoanalyse3$C, x), 1),
margin.table(table(thingstoanalyse3$C, x)))) ->
result5_tbl
但是因为它非常耗时,而且我必须以相同的顺序使用相同的表格制作其他内容,例如:
pdf("result4.pdf")
lapply(result_tta3, function(x)
barplot(table(x, thingstoanalyse3$B),
main="name", xlab=("lab"),
col=c("green", "yellow", "red"),
legend=rownames(table(x, thingstoanalyse3$B)),
beside=TRUE))
dev.off()
还有很多其他的事情。所以我想找一个像
这样的函数%让我们说矩阵中的第一列是k
,第二列是l
,第三列是m
lapply(datamatrix function(k, l, m)
k <- lapply(l, function(x)
cbind(prop.table(table(m, x), 1),
margin.table(table(m, x), 1),
margin.table(table(m, x)))))
或其他东西,但是它产生一个循环,并且总是将“resultx”,“result_ttax”和“thingstoanalysex”替换为矩阵中相应列中的值,但始终位于同一行中。