跨多个列计算值
Count values across multiple columns
我有一个数据框 df
其中:
a b x
4 102 K
6 89 L, K, P
7 46 P
9 76 L
0 29 L, K
1 690 P
0 301 K
我已经使用 recast()
将其转换为:
a K P L L, K, P L, K
4 102
6 89
7 46
9 76
0 29
1 690
0 301
不过,我希望它看起来像这样:
a K P L
4 102
6 89 89 89
7 46
9 76
0 29 29
1 690
0 301
我们可以在 'x' 列上使用 separate_rows
,然后使用 pivot_wider
重塑为 'wide' 格式
library(dplyr)
library(tidyr)
df %>%
mutate(rn = row_number()) %>%
separate_rows(x) %>%
pivot_wider(names_from = x, values_from = b) %>%
select(-rn)
# A tibble: 7 x 4
# a K L P
# <int> <int> <int> <int>
#1 4 102 NA NA
#2 6 89 89 89
#3 7 NA NA 46
#4 9 NA 76 NA
#5 0 29 29 NA
#6 1 NA NA 690
#7 0 301 NA NA
数据
df <- structure(list(a = c(4L, 6L, 7L, 9L, 0L, 1L, 0L), b = c(102L,
89L, 46L, 76L, 29L, 690L, 301L), x = c("K", "L, K, P", "P", "L",
"L, K", "P", "K")), class = "data.frame", row.names = c(NA, -7L
))
也可以按如下方式进行
library(tidyverse)
df %>%
separate_rows(x) %>%
pivot_wider(a, names_from = x, values_from = b) %>%
unnest()
我有一个数据框 df
其中:
a b x
4 102 K
6 89 L, K, P
7 46 P
9 76 L
0 29 L, K
1 690 P
0 301 K
我已经使用 recast()
将其转换为:
a K P L L, K, P L, K
4 102
6 89
7 46
9 76
0 29
1 690
0 301
不过,我希望它看起来像这样:
a K P L
4 102
6 89 89 89
7 46
9 76
0 29 29
1 690
0 301
我们可以在 'x' 列上使用 separate_rows
,然后使用 pivot_wider
library(dplyr)
library(tidyr)
df %>%
mutate(rn = row_number()) %>%
separate_rows(x) %>%
pivot_wider(names_from = x, values_from = b) %>%
select(-rn)
# A tibble: 7 x 4
# a K L P
# <int> <int> <int> <int>
#1 4 102 NA NA
#2 6 89 89 89
#3 7 NA NA 46
#4 9 NA 76 NA
#5 0 29 29 NA
#6 1 NA NA 690
#7 0 301 NA NA
数据
df <- structure(list(a = c(4L, 6L, 7L, 9L, 0L, 1L, 0L), b = c(102L,
89L, 46L, 76L, 29L, 690L, 301L), x = c("K", "L, K, P", "P", "L",
"L, K", "P", "K")), class = "data.frame", row.names = c(NA, -7L
))
也可以按如下方式进行
library(tidyverse)
df %>%
separate_rows(x) %>%
pivot_wider(a, names_from = x, values_from = b) %>%
unnest()