假设我们有一个如下所示的“测试”矩阵: (1,2,3, 4,5,6, 7,8,9, 10,11,12) 通过运行生成test <- matrix(1:12, ncol = 4)。一个简单的 3 x 4(行 x 列)矩阵,由 1 到 12 的数字组成。
现在假设我们想将值 1 添加到每个奇数矩阵列中的每个元素,因此我们最终得到一个具有以下值的矩阵:(2,3,4,4,5,6,8, 9,10,10,11,12)。我们如何使用apply()函数来做到这一点?
请注意,这是一个简化的示例。在我正在使用的更完整的代码中,矩阵根据用户输入动态扩展/收缩,因此我需要一个apply()计算矩阵实际列数的函数,而不是在上面的示例中使用 4 列的固定假设。(并且我不会向元素添加值 1;我正在运行并行最小值函数test[,1] <- pmin(test1[,1], 5)来表示将每个值限制为最大值 5)。
由于我目前对apply()函数族的了解有限,到目前为止我所能做的就是apply(test, 2, function(x) {return(x+1)})向所有列中的所有元素添加值 1,而不仅仅是奇数列。
我正在尝试学习如何使用这些apply()功能。
假设我们有一个 3 行 2 列的矩阵test <- matrix(c(1,2,3,4,5,6), ncol = 2),并且我们希望第一列 (1, 2, 3) 中每个元素的最大值不超过 2,因此我们最终得到一个矩阵 (1 ,2,2,4,5,6)。
如何编写一个apply()函数来做到这一点?
这是我的最新尝试:test1 <- apply(test[,1], 2, function(x) {if(x > 2){return(x = 2)} else {return(x)}})
在运行下面的 MWE 代码时,如底部图像所示,用户输入到模态对话框中呈现的矩阵中会导致矩阵压缩。用户输入到矩阵中的列越多,矩阵压缩得越多,直到留下一个难以阅读的矩阵。
有没有办法在添加列时不允许矩阵压缩,而是向右扩展,用户使用滚动条向左/向右导航?今天早上我一直在尝试插入滚动条,但还没有成功。
也许挑战在于shinyMatrix包装本身。我想知道是否可以使用 DT Table,因为它呈现得很好(带有滚动),并shinyMatrix作为输入/输出的后端引擎?Packagerhandsontable虽然很漂亮,但在模式对话框中效果不佳。
MWE代码:
library(shiny)
library(shinyMatrix)
ui <- fluidPage(
sidebarLayout(
sidebarPanel(
uiOutput("panel"),
actionButton("show2nd","Show 2nd input (in modal)")
),
mainPanel(plotOutput("plot1"))
)
)
server <- function(input, output, session){
output$panel <- renderUI({
tagList(
matrixInput("input1",
value = matrix(c(10,5), 1, 2, dimnames = list(c("1st input"),c("X|Y",""))),
rows = list(extend = FALSE, names = TRUE),
cols = list(extend = FALSE,
delta = 1,
delete = FALSE,
names = TRUE,
editableNames = FALSE,
multiheader=TRUE),
class = "numeric"),
helpText("Generate …Run Code Online (Sandbox Code Playgroud) 在底部的 MWE 代码中,我尝试在从一行运行到下一行时为每个唯一 id 生成运行余额。例如,运行以下代码时,输出应为:
data2 <-
id plusA plusB minusC running_balance [desired calculation for running balance]
1 3 5 10 -2 3 + 5 - 10 = -2
2 4 5 9 0 4 + 5 - 9 = 0
3 8 5 8 5 8 + 5 - 8 = 5
3 1 4 7 3 id doesn't change so 5 from above + (1 + 4 - 7) = 3
3 2 5 6 4 id doesn't …Run Code Online (Sandbox Code Playgroud) 我正在尝试在mutate(). df1假设我们从一个如下所示的数据框开始,由下面的代码生成:
ID Status
1 1 N
2 2 Y
3 3 Y
4 4 N
5 5 Y
df1 <- data.frame(
ID = c(1,2,3,4,5),
Status = c("N","Y","Y","N","Y")
)
Run Code Online (Sandbox Code Playgroud)
我使用 dplyr 的mutate()函数根据最右侧“状态”列的值生成一个新列。下面是新的tmp数据帧输出和生成它的 dplyr 代码(这是一个超级简单的示例,适用于我的更大问题 - 就这样吧):
ID Status Flag
1 1 N No
2 2 Y Yes
3 3 Y Yes
4 4 N No
5 5 Y Yes
tmp <-
df1 %>%
mutate("Flag"=case_when(Status=="Y"~"Yes",TRUE~"No"))
Run Code Online (Sandbox Code Playgroud)
我试图在上面嵌入“匹配”函数的等效项mutate(),以便插入到 Flag 列中的值取决于df1数据帧中的 ID 与这两个附加数据帧中的 …
我是 Excel 的重度用户,正在学习 R 和易于使用的 R 包 dplyr。我经常使用 Excel 的索引(...,match(...)) 公式组合从列中提取(查找)目标值。我将如何在 R 中并使用 dplyr 执行相同的操作,如下面的 Excel 插图所示?在 RI 中,我尝试复制标记为“匹配”的 G 列,该列的公式显示在其右侧突出显示为黄色并标记为“匹配列公式”的列中。
我正在使用 Excel 和配套的 R 代码来显示一系列逐步计算,以防 G 列看起来很麻烦!
在此示例中重现起始数据帧的代码:
myData <-
data.frame(
Element = c("A","A","C","A","B","B"),
Code1 = c(0,0,0,0,1,1),
Code2 = c(1,2,1,3,1,2),
Code3 = c(0,0,0,0,1,2),
Code4 = c(0,0,0,0,1.1,1.2)
)
Run Code Online (Sandbox Code Playgroud)