r - 如何将某些行移动到 R 中的列?
问题描述
所以我正在做一个数据科学项目,但后来遇到了一个问题。
下面是我的数据集的一个例子。让我简要介绍一下。(请理解为向您展示 Excel 中的数据集,因为我在 RStudio 上的数据集有点凌乱,并且其中还有一些韩文字母。
“FoodCode”是主题(ID)过去吃过的食物的代码24 小时。
所以你可以看到对象 ID 1 在过去 24 小时内吃了四种不同的食物。“摄入量”是对象吃的某种食物的量。“总摄入量
”显然是总量,每个受试者所有食物摄入量的总和。
“比例”只是“摄入量”/“总摄入量”。
现在,我想转换具有“ID”、“FoodCode A 的比例”、“FoodCode B 的比例”等的数据集。(有 20 种不同的食品代码)。当然,这次行中不会有重叠的 ID。
非常感谢您的帮助。谢谢。:)
解决方案
我在这里猜测您的目标是什么,因为您的问题不容易正确解释。这是我对它的阅读:
library(dplyr)
library(tidyr)
library(tibble)
data <- tibble(
ID = c(1, 1, 1, 1, 2, 2, 2,2),
FoodCode = c("A", "B", "C", "D", "A", "B", "D", "E"),
Intake = c(100, 100, 200, 80, 20, 200, 100, 20)
)
data <- data %>%
group_by(ID) %>%
mutate(IntakeTotal = sum(Intake)) %>%
ungroup() %>%
mutate(Proportion = Intake / IntakeTotal)
summary <- data %>%
select(-Intake, -IntakeTotal) %>%
pivot_wider(values_from = Proportion,
names_from = FoodCode)
可以从其他列轻松计算 IntakeTotal 和 Proportion 列。然后我对您想要的内容的阅读是使用该pivot-wider
函数将对象重塑为宽格式:
初始对象data
:
> data
# A tibble: 8 x 3
ID FoodCode Intake
<dbl> <chr> <dbl>
1 1 A 100
2 1 B 100
3 1 C 200
4 1 D 80
5 2 A 20
6 2 B 200
7 2 D 100
8 2 E 20
重新创建 IntakeTotal 和 Proportion 列后:
> data
# A tibble: 8 x 5
ID FoodCode Intake IntakeTotal Proportion
<dbl> <chr> <dbl> <dbl> <dbl>
1 1 A 100 480 0.208
2 1 B 100 480 0.208
3 1 C 200 480 0.417
4 1 D 80 480 0.167
5 2 A 20 340 0.0588
6 2 B 200 340 0.588
7 2 D 100 340 0.294
8 2 E 20 340 0.0588
最后在将形状更改为宽格式后。这就是你所追求的吗?
> summary
# A tibble: 2 x 6
ID A B C D E
<dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 1 0.208 0.208 0.417 0.167 NA
2 2 0.0588 0.588 NA 0.294 0.0588
推荐阅读
- javascript - 我们如何使表单将提交的信息发送到电子邮件
- javascript - 如何计算圆周上两点之间的坐标点x,y(内圆)?
- python - 数据框:跨列的笛卡尔积
- c++ - 通知 cv 时 condition_variable::wait_for 是否返回 true
- spring-boot - 如何在单元测试中停止和启动嵌入式 Kafka?
- c++ - FLTK - Mac iOS 图像未显示
- python - Django 使用哪些模板加载器?
- python - 在绘图的某处绘制带有 url 的 pandas 图表
- python-3.x - 在 python2.7 和 python3.X 中使用 numba-scipy 扩展计算 cdist 时出错
- informatica - taget 的数据库级别和 Informatica 级别的数据类型不匹配