循环与字符矩阵

时间:2017-06-23 10:19:53

标签: r loops matrix

我在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”替换为矩阵中相应列中的值,但始终位于同一行中。

0 个答案:

没有答案