R:获取 2 个变量值以占据由换行符分隔的单个单元格
R: Get 2 variable values to occupy single cell separated by new line
我正在尝试获取 2 个变量值来填充 1 个单元格。
举个例子,假设我有以下数据:
var1 <- c("100","200","300","400")
var2 <- c("800","900","1,000","800")
var1andVar2 <- paste(var1,var2, sep = "\n")
var3 <- c("11","22","33","44")
allVars <- rbind(var1andVar2,var3)
这段代码得到以下输出:
> allVars
[,1] [,2] [,3] [,4]
var1andVar2 "100\n800" "200\n900" "300\n1,000" "400\n800"
var3 "11" "22" "33" "44"
但是我试图将其作为输出:
> allVars
[,1] [,2] [,3] [,4]
var1andVar2 "100" "200" "300" "400"
"800" "900" "1,000" "800"
var3 "11" "22" "33" "44"
所以我的 var1 和 var2 占用了一个单元格,它们之间用新行隔开。
有什么想法可以实现吗??我很感激!!
这将创建一个矩阵 m
和数据框 d
,其第一行包含 var1
和 var2
,第二行包含 var3
。
m <- rbind(Map(c, var1, var2), as.list(var3))
d <- as.data.frame(m)
colnames(d) <- 1:ncol(d) # use numbers for column names
给予:
> d
1 2 3 4
1 100, 800 200, 900 300, 1,000 400, 800
2 11 22 33 44
> d[[1,1]][2]
[1] "800"
更新
已修订。
我查看了 Datatable (DT) 提供的选项,似乎有一个行分组选项,但是我对 javascript 的了解还不够,无法正确实现它。如果您想坚持使用 DT,请查看此 link。
但是,我发现了一个可能更优雅的解决方案,它使用 kableExtra
中的打印选项,可以在 html(闪亮)和 pdf 输出中使用:
有关详细信息,请参阅 here。
library(tidyverse)
library(kableExtra)
var1 <- c("100","200","300","400")
var2 <- c("800","900","1,000","800")
var3 <- c("11","22","33","44")
allVars <- rbind(var1, var2 ,var3)
df <- allVars %>% as.tibble(rownames = "Vars")
df <- df %>% mutate(
Vars = case_when(
Vars %in% c("var1","var2") ~ "Var1andVar2",
TRUE ~ Vars
)
)
kable(df) %>%
kable_styling(full_width = F) %>%
column_spec(1, bold = T) %>%
collapse_rows(columns = 1:2, valign = "top")
我在 R-mardown 笔记本中 运行 这段代码,与输出非常相似
它也应该在 Shiny-App 中工作。
我正在尝试获取 2 个变量值来填充 1 个单元格。
举个例子,假设我有以下数据:
var1 <- c("100","200","300","400")
var2 <- c("800","900","1,000","800")
var1andVar2 <- paste(var1,var2, sep = "\n")
var3 <- c("11","22","33","44")
allVars <- rbind(var1andVar2,var3)
这段代码得到以下输出:
> allVars
[,1] [,2] [,3] [,4]
var1andVar2 "100\n800" "200\n900" "300\n1,000" "400\n800"
var3 "11" "22" "33" "44"
但是我试图将其作为输出:
> allVars
[,1] [,2] [,3] [,4]
var1andVar2 "100" "200" "300" "400"
"800" "900" "1,000" "800"
var3 "11" "22" "33" "44"
所以我的 var1 和 var2 占用了一个单元格,它们之间用新行隔开。
有什么想法可以实现吗??我很感激!!
这将创建一个矩阵 m
和数据框 d
,其第一行包含 var1
和 var2
,第二行包含 var3
。
m <- rbind(Map(c, var1, var2), as.list(var3))
d <- as.data.frame(m)
colnames(d) <- 1:ncol(d) # use numbers for column names
给予:
> d
1 2 3 4
1 100, 800 200, 900 300, 1,000 400, 800
2 11 22 33 44
> d[[1,1]][2]
[1] "800"
更新
已修订。
我查看了 Datatable (DT) 提供的选项,似乎有一个行分组选项,但是我对 javascript 的了解还不够,无法正确实现它。如果您想坚持使用 DT,请查看此 link。
但是,我发现了一个可能更优雅的解决方案,它使用 kableExtra
中的打印选项,可以在 html(闪亮)和 pdf 输出中使用:
有关详细信息,请参阅 here。
library(tidyverse)
library(kableExtra)
var1 <- c("100","200","300","400")
var2 <- c("800","900","1,000","800")
var3 <- c("11","22","33","44")
allVars <- rbind(var1, var2 ,var3)
df <- allVars %>% as.tibble(rownames = "Vars")
df <- df %>% mutate(
Vars = case_when(
Vars %in% c("var1","var2") ~ "Var1andVar2",
TRUE ~ Vars
)
)
kable(df) %>%
kable_styling(full_width = F) %>%
column_spec(1, bold = T) %>%
collapse_rows(columns = 1:2, valign = "top")
我在 R-mardown 笔记本中 运行 这段代码,与输出非常相似
它也应该在 Shiny-App 中工作。