r - 列表被添加到数据框
问题描述
为什么要在此处将列表添加到我的数据框中?
这是我的数据框
df <- data.frame(ch = rep(1:10, each = 12), # care home id
year_id = rep(2018),
month_id = rep(1:12), # month using the system over the course of a year (1 = first month, 2 = second month...etc.)
totaladministrations = rbinom(n=120, size = 1000, prob = 0.6), # administrations that were scheduled to have been given in the month
missed = rbinom(n=120, size = 20, prob = 0.8), # administrations that weren't given in the month (these are bad!)
beds = rep(rbinom(n = 10, size = 60, prob = 0.6), each = 12), # number of beds in the care home
rating = rep(rbinom(n= 10, size = 4, prob = 0.5), each = 12)) # latest inspection rating (1. Inadequate, 2. Requires Improving, 3. Good, 4 Outstanding)
df <- arrange(df, df$ch, df$year_id, df$month_id)
str(df)
> str(df)
'data.frame': 120 obs. of 7 variables:
$ ch : int 1 1 1 1 1 1 1 1 1 1 ...
$ year_id : num 2018 2018 2018 2018 2018 ...
$ month_id : int 1 2 3 4 5 6 7 8 9 10 ...
$ totaladministrations: int 576 598 608 576 608 637 611 613 593 626 ...
$ missed : int 18 18 19 16 16 13 17 16 15 17 ...
$ beds : int 38 38 38 38 38 38 38 38 38 38 ...
$ rating : int 2 2 2 2 2 2 2 2 2 2 ...
到目前为止一切都很好。
我只想添加另一列来对ch
组内的月份编号进行排序(这相当于本示例中的实际月份 ID,但忽略这一点,我的真实数据不同),所以我使用:
df <- df %>% group_by(ch) %>%
mutate(sequential_month_counter = 1:n())
这似乎添加了一堆我不太了解或想要或需要的东西,例如列表...
str(df)
> str(df)
Classes ‘grouped_df’, ‘tbl_df’, ‘tbl’ and 'data.frame': 120 obs. of 8 variables:
$ ch : int 1 1 1 1 1 1 1 1 1 1 ...
$ year_id : num 2018 2018 2018 2018 2018 ...
$ month_id : int 1 2 3 4 5 6 7 8 9 10 ...
$ totaladministrations : int 601 590 593 599 615 611 628 587 604 600 ...
$ missed : int 16 14 17 16 18 16 15 18 15 20 ...
$ beds : int 35 35 35 35 35 35 35 35 35 35 ...
$ rating : int 3 3 3 3 3 3 3 3 3 3 ...
$ sequential_month_counter: int 1 2 3 4 5 6 7 8 9 10 ...
- attr(*, "groups")=Classes ‘tbl_df’, ‘tbl’ and 'data.frame': 10 obs. of 2 variables:
..$ ch : int 1 2 3 4 5 6 7 8 9 10
..$ .rows:List of 10
.. ..$ : int 1 2 3 4 5 6 7 8 9 10 ...
.. ..$ : int 13 14 15 16 17 18 19 20 21 22 ...
.. ..$ : int 25 26 27 28 29 30 31 32 33 34 ...
.. ..$ : int 37 38 39 40 41 42 43 44 45 46 ...
.. ..$ : int 49 50 51 52 53 54 55 56 57 58 ...
.. ..$ : int 61 62 63 64 65 66 67 68 69 70 ...
.. ..$ : int 73 74 75 76 77 78 79 80 81 82 ...
.. ..$ : int 85 86 87 88 89 90 91 92 93 94 ...
.. ..$ : int 97 98 99 100 101 102 103 104 105 106 ...
.. ..$ : int 109 110 111 112 113 114 115 116 117 118 ...
..- attr(*, ".drop")= logi TRUE
这里发生了什么?我只想要一个数据框。为什么之后还有所有额外的输出$ sequential_month_counter: int 1 2 3 4 5 6 7 8 9 10 ...
,更重要的是我可以忽略它并继续将其视为普通数据帧(我将在 df 上运行一些广义线性混合模型)?
解决方案
该属性"groups"
是dplyr
存储您添加时添加的分组信息的位置group_by(ch)
。它不会伤害任何东西,如果您ungroup()
:
df %>% group_by(ch) %>%
mutate(sequential_month_counter = 1:n()) %>%
ungroup %>%
str
# Classes ‘tbl_df’, ‘tbl’ and 'data.frame': 120 obs. of 8 variables:
# $ ch : int 1 1 1 1 1 1 1 1 1 1 ...
# $ year_id : num 2018 2018 2018 2018 2018 ...
# $ month_id : int 1 2 3 4 5 6 7 8 9 10 ...
# $ totaladministrations : int 575 597 579 605 582 599 577 604 630 632 ...
# $ missed : int 18 16 16 18 18 11 10 13 17 16 ...
# $ beds : int 33 33 33 33 33 33 33 33 33 33 ...
# $ rating : int 3 3 3 3 3 3 3 3 3 3 ...
# $ sequential_month_counter: int 1 2 3 4 5 6 7 8 9 10 ...
作为旁注,您应该在dplyr
动词中使用裸列名,而不是data$column
. 使用arrange
,没关系,但是在分组操作中它会导致错误。您应该养成使用arrange(df, ch, year_id, month_id)
而不是arrange(df, df$ch, df$year_id, df$month_id)
.
推荐阅读
- python - 无法安装python包dionysus
- python - BeautifulSoup 方法 find() 不适用于其他属性
- c++ - 无法访问 OpenCV 中的 .dll 库
- python - 如何通过别名在 Linux 中将默认的 python3 设置为 python3.9?
- centos - 在 CentOS 8 上无法找到并安装 ImageMagick
- javascript - 如何使用 React 创建自动增长收缩输入?
- task - 为什么我的 leetcode 任务不是从数字 1 开始的?
- javascript - Promise.resolve() 什么时候触发 then() 方法?
- javascript - 为什么 React 源代码是用 JavaScript 而不是 TypeScript 编写的,但仍然有类型?
- swift - 如果默认设置为 true,为什么我需要设置 Analytics.setAnalyticsCollectionEnabled(true)?Firebase + iOS