我有两个包含聚合数据的数据框。第一个数据框由经历情景A,B和C的3组(第1组,第2组和第3组)的中值组成。
我的第二个数据框由3个组(第1组,第2组和第3组)的样本大小组成,这些组经历了方案A,B和C.
数据类似于以下内容:
median_data <- data.frame(Group = c(1, 2, 3), scenario_A = c(296.7, 152.3, 113.6),
scenario_B = c(109, 76, 79), scenario_C = c(321.5, 236.5, 191))
sample_size_data <- data.frame(Group = c(1, 2, 3), scenario_A = c(113, 121, 59),
scenario_B = c(100, 100, 55), scenario_C = c(100, 100, 55))
我想将两个数据帧中Scenario列中的值转换为字符数据类型,并将第一个数据帧(中值)的一个单元格中的值与第二个数据帧中的相应单元格(样本大小)连接起来。
我在Stackoverflow上搜索过;这不是一个rbind / cbind问题。我想到的所需输出是将数据帧1中的第1行第1列与数据第2帧中的第1行第1列连接起来,依此类推。
我尝试过以下代码,几乎是正确的。我不知道如何将其更改为3行,4列数据帧,并且结果数据框中第1列(组)的样本大小不应该存在。
df <- data.frame(paste(apply(median_data, 2, as.character), " (n = ",
apply(sample_size_data, 2,
as.character), ")",sep = ""))
谢谢,非常感谢!
答案 0 :(得分:4)
将计数器传递给apply语句以索引第二个数据帧
i<-1
x<-as.data.frame(apply(median_data[,-1], 2, function(x) {
i<<-i+1
paste0(x, " (n = ",sample_size_data[,i],")")
}))
x<-cbind(Group=median_data[,1], x)
x
Group scenario_A scenario_B scenario_C
1 1 296.7 (n = 113) 109 (n = 100) 321.5 (n = 100)
2 2 152.3 (n = 121) 76 (n = 100) 236.5 (n = 100)
3 3 113.6 (n = 59) 79 (n = 55) 191 (n = 55)
答案 1 :(得分:3)
使用dplyr的解决方案。我们可以将两个数据框都准备为字符,使用bind_rows
将它们组合起来,然后使用group_by
和summarise_all
来连接所有列。
library(dplyr)
median_data2 <- median_data %>%
mutate_at(vars(-Group), funs(as.character(.)))
sample_size_data2 <- sample_size_data %>%
mutate_at(vars(-Group), funs(paste0("(n = ", ., ")")))
dat <- bind_rows(median_data2, sample_size_data2) %>%
group_by(Group) %>%
summarise_all(funs(paste(., collapse = " "))) %>%
ungroup()
dat
# # A tibble: 3 x 4
# Group scenario_A scenario_B scenario_C
# <dbl> <chr> <chr> <chr>
# 1 1 296.7 (n = 113) 109 (n = 100) 321.5 (n = 100)
# 2 2 152.3 (n = 121) 76 (n = 100) 236.5 (n = 100)
# 3 3 113.6 (n = 59) 79 (n = 55) 191 (n = 55)
答案 2 :(得分:2)
我们可paste
data.frame
个Map
的相应列out <- median_data
out[-1] <- Map(function(x, y) sprintf("%0.1f (n = %d)", x, y),
median_data[-1], sample_size_data[-1])
data.frame
或将matrix
转换为paste
和out <- median_data
out[-1] <- paste0(as.matrix(median_data[-1]), " (n=",
as.matrix(sample_size_data[-1]), ")")
out
# Group scenario_A scenario_B scenario_C
#1 1 296.7 (n=113) 109 (n=100) 321.5 (n=100)
#2 2 152.3 (n=121) 76 (n=100) 236.5 (n=100)
#3 3 113.6 (n=59) 79 (n=55) 191 (n=55)
mpf.candlestick_ohlc