作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试 reshape 数据框,但该任务与典型的 reshape 完全不同,我无法完全改变它。该表最初是在 excel 中,但我已经导入到 R,因此我可以在任一软件中使用解决方案。
我有一个包含名称、值和月份的数据框 donors
:
NAME AMT MONTH
brett 100 jan
brett 100 mar
brett 100 nov
brett 50 apr
brett 50 jun
jane 75 dec
sam 200 jan
sam 200 feb
sam 200 mar
我需要重新调整此数据框的形状,以便每个月都有一个 NAME 列、一个 AMT 列和一个列。每行对应于在名称和数量上都是唯一的任何观察值,月份列是二进制变量(如果捐赠者/数量组合在那个月发生,则为 1,否则为 0。
所以上面的例子可以得出:
NAME AMT JAN FEB MAR APR MAY JUN JUL AUG SEP OCT NOV DEC
brett 100 1 0 1 0 0 0 0 0 0 0 1 0
brett 50 0 0 0 1 0 1 0 0 0 0 0 0
jane 75 0 0 0 0 0 0 0 0 0 0 0 1
sam 200 1 1 1 0 0 0 0 0 0 0 0 0
如果您想完成我的代码,请创建一个等于 NAME/AMT 组合出现的总次数的最后一列(恰好等于月份列的总和)...但我可以自己做,如果您没有感觉。
谢谢!
最佳答案
这是一个 tidyverse
尝试 -
complete
以创建缺少月份的行。排列
,使列的顺序正确。pivot_wider
获取宽格式数据。library(dplyr)
library(tidyr)
df %>%
complete(MONTH = tolower(month.abb)) %>%
arrange(match(MONTH, tolower(month.abb))) %>%
pivot_wider(names_from = MONTH, values_from = MONTH,
values_fn = length, values_fill = 0) %>%
na.omit
# NAME AMT jan feb mar apr may jun jul aug sep oct nov dec
# <chr> <int> <int> <int> <int> <int> <int> <int> <int> <int> <int> <int> <int> <int>
#1 brett 100 1 0 1 0 0 0 0 0 0 0 1 0
#2 sam 200 1 1 1 0 0 0 0 0 0 0 0 0
#3 brett 50 0 0 0 1 0 1 0 0 0 0 0 0
#4 jane 75 0 0 0 0 0 0 0 0 0 0 0 1
请注意,month.abb
是内置的 R 向量,它提供缩写的月份名称。我使用 tolower(month.abb)
将其与数据中的实际列名相匹配。
数据
df <- structure(list(NAME = c("brett", "brett", "brett", "brett", "brett",
"jane", "sam", "sam", "sam"), AMT = c(100L, 100L, 100L, 50L,
50L, 75L, 200L, 200L, 200L), MONTH = c("jan", "mar", "nov", "apr",
"jun", "dec", "jan", "feb", "mar")),
class = "data.frame", row.names = c(NA, -9L))
关于r - 如何在 R(或 excel)中执行这种独特的整形?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70304688/
我是一名优秀的程序员,十分优秀!