提问人:melisa 提问时间:11/14/2023 更新时间:11/14/2023 访问量:46
在 R 中将列的值分组到类别中
Grouping values of a column into categories in R
问:
我在 R 中有数据,我想使用第一列中的值进行比较。类别名称已包含在该类别的实际值之前的第一列中。问题在于,就目前而言,类别名称被视为一个值。我想将这些数据组织成“A”和“B”类别(A和B不被视为值),然后在“团队A”和“团队B”之间进行比较。我该怎么做?
组织 | A队 | B队 |
---|---|---|
一个 | 10 | 23 |
猫 | 55 | 41 |
狗 | 22 | 33 |
猪 | 52 | 85 |
B | 12 | 12 |
狮子 | 32 | 44 |
老虎 | 43 | 55 |
象 | 85 | 69 |
答:
0赞
Jon Spring
11/14/2023
#1
假设我们有一个类别列表,我们可以创建一个列,当它们匹配时从组织中复制这些值,并在 NA 上填充这些值。
library(tidyverse)
df1 |>
mutate(category = if_else(Organization %in% c("A", "B"), Organization, NA)) |>
fill(category)
结果
Organization Team.A Team.B category
1 A 10 23 A
2 Cat 55 41 A
3 Dog 22 33 A
4 Pig 52 85 A
5 B 12 12 B
6 Lion 32 44 B
7 Tiger 43 55 B
8 Elephant 85 69 B
数据:
df1 <- data.frame(
stringsAsFactors = FALSE,
Organization = c("A","Cat","Dog","Pig","B",
"Lion","Tiger","Elephant"),
Team.A = c(10L, 55L, 22L, 52L, 12L, 32L, 43L, 85L),
Team.B = c(23L, 41L, 33L, 85L, 12L, 44L, 55L, 69L)
)
0赞
Andre Wildberg
11/14/2023
#2
这会根据在组织中找到单个字符将数据分组/分类为“A”和“B”。
library(dplyr)
df %>%
group_by(grp = cumsum(nchar(Organization) == 1)) %>%
mutate(grp = first(Organization))
# A tibble: 8 × 4
# Groups: grp [2]
Organization `Team A` `Team B` grp
<chr> <int> <int> <chr>
1 A 10 23 A
2 Cat 55 41 A
3 Dog 22 33 A
4 Pig 52 85 A
5 B 12 12 B
6 Lion 32 44 B
7 Tiger 43 55 B
8 Elephant 85 69 B
数据
df <- structure(list(Organization = c("A", "Cat", "Dog", "Pig", "B",
"Lion", "Tiger", "Elephant"), `Team A` = c(10L, 55L, 22L, 52L,
12L, 32L, 43L, 85L), `Team B` = c(23L, 41L, 33L, 85L, 12L, 44L,
55L, 69L)), class = "data.frame", row.names = c(NA, -8L))
评论