我有一个这样的数据框:
df <- data.frame(grouping = c(rep("site1_1",9), rep("site2_1",9)),
var = c(rep("P", 3), rep("G", 3), rep("B",3),rep("P", 3), rep("B", 3), rep("G",3)),
order= c(rep(0, 3), rep(1, 3), rep(2,3),rep(0, 3), rep(1, 3), rep(2,3)))
grouping var order
1 site1_1 P 0
2 site1_1 P 0
3 site1_1 P 0
4 site1_1 G 1
5 site1_1 G 1
6 site1_1 G 1
7 site1_1 B 2
8 site1_1 B 2
9 site1_1 B 2
10 site2_1 P 0
11 site2_1 P 0
12 site2_1 P 0
13 site2_1 B 1
14 site2_1 B 1
15 site2_1 B 1
16 site2_1 G 2
17 site2_1 G 2
18 site2_1 G 2
我有一个列,表示一个名为分组的唯一ID(从不重复)。在每个分组中,我有3个变量(P,G和B)。如上所示,它们会在分组中重复多次。
顺序始终为P,G,B或P,B,G。在一组中,P总是0,B / G是1或2.它们在组内永远不能是1和2,在组之间它是B或G是1还是2的随机性。
我有一个订单栏,用于显示var在每个组中的顺序
我想添加一个新列,根据B是否在G之前标记整个分组(P,B和G),反之亦然。
这是一个例子:
grouping var order label
1 site1_1 P 0 Gfirst
2 site1_1 P 0 Gfirst
3 site1_1 P 0 Gfirst
4 site1_1 G 1 Gfirst
5 site1_1 G 1 Gfirst
6 site1_1 G 1 Gfirst
7 site1_1 B 2 Gfirst
8 site1_1 B 2 Gfirst
9 site1_1 B 2 Gfirst
10 site2_1 P 0 Bfirst
11 site2_1 P 0 Bfirst
12 site2_1 P 0 Bfirst
13 site2_1 B 1 Bfirst
14 site2_1 B 1 Bfirst
15 site2_1 B 1 Bfirst
16 site2_1 G 2 Bfirst
17 site2_1 G 2 Bfirst
18 site2_1 G 2 Bfirst
我不清楚如何做到这一点。
使用dplyr我从
开始df%&gt;%group_by(分组)%&gt;%mutate(label = .......
但在此之后,我失去了如何指定标签是以P,B和G序列顺序为条件的,以及如何说明它们在每组中重复多次的事实
我去了这个交流:
[How can I create a new column in a dataframe based on permutations of other columns?
但我不清楚如何采用答案,因为我需要按分组列对它们进行分组,并且需要考虑每个变量中不同数量的排列(可能有3-15 P&#39; s,每个分组中都有B&G和
。非常感谢任何帮助。
答案 0 :(得分:1)
library(tidyverse)
df %>%
group_by(grouping) %>%
mutate(label = paste0(substr(gsub("[^G|B]", "", paste(unique(var), collapse = "")), 1, 1), "first"))
答案 1 :(得分:1)
使用library(shinydashboard)
library(shiny)
library(DT)
myData <- matrix(
data=c('13,867','$229,153','30,128','$16.53','98.17%','39.69%'),
nrow = 6, ncol = 1, dimnames = list(letters[1:6], c("Metrics"))
)
ui <- dashboardPage(
dashboardHeader(),
dashboardSidebar(),
dashboardBody(
box(DTOutput("table"))
)
)
server <- function(input, output) {
output$table <- renderDT({
myData
}, options = list(rownames = TRUE))
}
shinyApp(ui, server)
和dplyr
的一个解决方案可以实现为:
ifelse