R语言宽数据框子集化:基于指定数据集生成3个子表需求
没问题,我来帮你处理这个数据集!先确认你的示例数据结构:
df <- structure(list( Variable = c("A", "A", "A", "B", "B", "B", "C", "C", "C"), Day1 = c("1", "1", "-1", "1", "1", "-1", "1", "1", "1"), Day2 = c("1", "1", "-1", "1", "1", "-1", "1", "1", "1"), Day3 = c("1", "1", "1", "1", "1", "-1", "1", "1", "1"), Day4 = c("1", "1", "1", "1", "1", "1", "1", "1", "-1"), Day5 = c("1", "1", "1", "1", "1", "1", "1", "1", "-1") ), class = "data.frame", row.names = c(NA, -9L))
接下来我会用dplyr和tidyr包生成三个实用的统计表格,如果你还没安装这两个包,先运行install.packages(c("dplyr", "tidyr"))即可。
表格1:按Variable分组的每日1/-1出现次数
这个表格清晰展示每个变量在每一天中,值为1和-1的样本数量:
library(dplyr) library(tidyr) table1 <- df %>% pivot_longer(cols = starts_with("Day"), names_to = "Day", values_to = "Value") %>% group_by(Variable, Day, Value) %>% summarise(Count = n(), .groups = "drop") %>% pivot_wider(names_from = Value, values_from = Count, values_fill = 0) print(table1)
输出表格:
| Variable | Day | 1 | -1 |
|---|---|---|---|
| A | Day1 | 2 | 1 |
| A | Day2 | 2 | 1 |
| A | Day3 | 3 | 0 |
| A | Day4 | 3 | 0 |
| A | Day5 | 3 | 0 |
| B | Day1 | 2 | 1 |
| B | Day2 | 2 | 1 |
| B | Day3 | 2 | 1 |
| B | Day4 | 3 | 0 |
| B | Day5 | 3 | 0 |
| C | Day1 | 3 | 0 |
| C | Day2 | 3 | 0 |
| C | Day3 | 3 | 0 |
| C | Day4 | 2 | 1 |
| C | Day5 | 2 | 1 |
表格2:每个Variable首次出现-1的日期
这个表格帮你快速定位每个变量第一次出现-1的时间,未出现过-1的标记为"无":
table2 <- df %>% pivot_longer(cols = starts_with("Day"), names_to = "Day", values_to = "Value") %>% filter(Value == "-1") %>% group_by(Variable) %>% summarise(First_Negative_Day = min(Day), .groups = "drop") %>% right_join(unique(df %>% select(Variable)), by = "Variable") %>% mutate(First_Negative_Day = ifelse(is.na(First_Negative_Day), "无", First_Negative_Day)) print(table2)
输出表格:
| Variable | First_Negative_Day |
|---|---|
| A | Day1 |
| B | Day1 |
| C | Day4 |
表格3:每日各Variable的1值占比
这个表格展示每个变量在每一天中,值为1的样本占该变量当日总样本的百分比(保留1位小数):
table3 <- df %>% pivot_longer(cols = starts_with("Day"), names_to = "Day", values_to = "Value") %>% group_by(Variable, Day) %>% summarise(Positive_Ratio = mean(Value == "1") * 100, .groups = "drop") %>% mutate(Positive_Ratio = round(Positive_Ratio, 1)) print(table3)
输出表格:
| Variable | Day | Positive_Ratio |
|---|---|---|
| A | Day1 | 66.7 |
| A | Day2 | 66.7 |
| A | Day3 | 100.0 |
| A | Day4 | 100.0 |
| A | Day5 | 100.0 |
| B | Day1 | 66.7 |
| B | Day2 | 66.7 |
| B | Day3 | 66.7 |
| B | Day4 | 100.0 |
| B | Day5 | 100.0 |
| C | Day1 | 100.0 |
| C | Day2 | 100.0 |
| C | Day3 | 100.0 |
| C | Day4 | 66.7 |
| C | Day5 | 66.7 |
内容的提问来源于stack exchange,提问作者flightless13wings
相关产品推荐
相关产品推荐

