- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有以下用例 pivot_wider
:
我有一个用逗号分隔的字符串的数据集。我想为每个逗号分隔值创建唯一的列,就像一个虚拟变量采用 1
s(存在值)和 0
s(值不存在)。
我可以使用下面显示的方法来做到这一点。但是,我认为这是一种解决方法,因为我需要添加一列 value = 1
然后我在 pivot_wider
中使用它s values_from
争论。我尝试使用 values_from = 1
没有先创建一个新列(我认为 pivot_wider
可以动态创建值),但结果是 values_from
使用 tidyeval 并改为选择第一列。我也试过根本不指定参数,但这也不起作用。
有没有更好的方法来使用 pivot_wider
不创建取值 1
的列对于所有行?由于我真的经常使用这种“解决方法”,我只是想知道是否有更官方的方法来达到相同的结果。
library(dplyr)
library(tidyr)
# data generating function
create_codes <- function(inp, len) {
size <- round(runif(len, 1, 5))
res <- vapply(seq_len(len),
FUN.VALUE = character(1),
FUN = function(x) {
paste(sample(inp, size[x]), collapse = ", ")
})
}
# toy data
set.seed(123)
dat <- tibble(id = 1:100,
codes = create_codes(10:25, 100))
# transform codes to unique columns
dat %>%
mutate(codes2 = strsplit(codes, ", "),
# can pivot_wider work without this 'workaround' => 'value = 1'?
value = 1) %>%
unnest(codes2) %>%
arrange(codes2) %>%
pivot_wider(names_from = codes2,
names_prefix = "code_",
names_repair = "universal",
values_from = value,
values_fill = 0)
#> # A tibble: 100 x 18
#> id codes code_10 code_11 code_12 code_13 code_14 code_15 code_16 code_17
#> <int> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
#> 1 11 13, … 1 0 1 1 0 1 0 0
#> 2 13 23, … 1 0 0 0 0 0 0 1
#> 3 25 10, … 1 0 0 1 0 0 0 1
#> 4 30 15, … 1 0 0 0 0 1 0 0
#> 5 37 14, … 1 0 0 0 1 0 1 0
#> 6 47 20, … 1 0 0 0 0 0 0 0
#> 7 59 20, … 1 0 0 0 0 0 0 0
#> 8 60 19, … 1 0 0 0 0 0 0 0
#> 9 66 10, … 1 0 0 0 1 0 0 0
#> 10 67 13, … 1 0 1 1 0 0 0 0
#> # … with 90 more rows, and 8 more variables: code_18 <dbl>, code_19 <dbl>,
#> # code_20 <dbl>, code_21 <dbl>, code_22 <dbl>, code_23 <dbl>, code_24 <dbl>,
#> # code_25 <dbl>
创建于 2021-02-16 由
reprex package (v0.3.0)
最佳答案
我们可以使用 values_fn
与 length
这将绕过创建列“值”的需要。注意,这里我们假设 OP 的问题即将绕过 value
的创建。列而不是关于更改 strsplit
library(dplyr)
library(tidyr)
dat %>%
mutate(codes2 = strsplit(codes, ", ")) %>%
unnest(codes2) %>%
arrange(codes2) %>%
pivot_wider(names_from = codes2,
names_prefix = "code_",
names_repair = "universal", values_from = codes2,
values_fill = 0, values_fn = length)
-输出
# A tibble: 100 x 18
id codes code_10 code_11 code_12 code_13 code_14 code_15 code_16 code_17 code_18 code_19 code_20
<int> <chr> <int> <int> <int> <int> <int> <int> <int> <int> <int> <int> <int>
1 11 13, … 1 0 1 1 0 1 0 0 0 0 0
2 13 23, … 1 0 0 0 0 0 0 1 0 0 0
3 25 10, … 1 0 0 1 0 0 0 1 0 0 0
4 30 15, … 1 0 0 0 0 1 0 0 0 0 0
5 37 14, … 1 0 0 0 1 0 1 0 0 0 0
6 47 20, … 1 0 0 0 0 0 0 0 0 0 1
7 59 20, … 1 0 0 0 0 0 0 0 0 1 1
8 60 19, … 1 0 0 0 0 0 0 0 0 1 0
9 66 10, … 1 0 0 0 1 0 0 0 1 0 0
10 67 13, … 1 0 1 1 0 0 0 0 1 0 0
# … with 90 more rows, and 5 more variables: code_21 <int>, code_22 <int>, code_23 <int>, code_24 <int>,
# code_25 <int>
dat %>%
mutate(codes2 = strsplit(codes, ", ")) %>%
unnest(codes2) %>%
arrange(codes2) %>%
pivot_wider(names_from = codes2,
names_prefix = "code_",
names_repair = "universal", values_from = codes2,
values_fill = 0, values_fn = list(codes2 = ~ +(length(.) > 0)))
cSplit_e
更轻松地完成
library(splitstackshape)
cSplit_e(dat, "codes", sep=",", type = 'character', fill = 0, drop = TRUE)
关于r - 使用 pivot_wider 从没有 values_from 列的逗号分隔向量创建唯一列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66233505/
我可以使用以下方法对特定列进行 pivot_wider: new_df % pivot_longer(!c(id, value_col), names_to = "Cols", values_to
这个问题在这里已经有了答案: How to reshape data from long to wide format (11 个回答) 11 个月前关闭。 我想用pivot_wider为单个日期创建
我正在尝试转换长数据,以便重复行值成为标题。数据如下所示: # A tibble: 12 x 2 x1 x2 1 Position
我正在尝试将数据集从长到宽 reshape 。以下代码有效,但我很好奇是否有办法不提供值列并仍然使用 pivot_wider .在以下示例中,我必须创建一个临时列“val”才能使用 pivot_wid
我有什么: Symbol Date Value A. 07/20 10 A. 09/20. 12 B. 07/20. 15 B. 08/20. 19 VFINX. 07/20. 22 VFINX 08
Dataframe indrur 由变量 S447.1 组成,表示运输方式。我使用 dplyr 按变量分组并将其转换为宽格式。 library(dplyr) indrurmodes%
如果因子的级别存在,但在用作 names_from 参数时从未出现在数据中,我真的希望 pivot_wider 创建一个带有 NA 的列。例如,第一行给了我一个两列的 tibble,但我真的很喜欢下面
我试图从长到宽 reshape 我的数据,但在这里我需要创建名称列,例如 event1、event2、event3 等。换句话说,names_from 没有自然的候选者。争论。我尝试了几种不同的方法,
我有一个数据框,行和列中的变量都包含变量,因此我尝试使用数据透视表来整理数据。我的数据如下所示: head(df) # A tibble: 6 x 4 State Year Var
我的数据目前看起来像这样,列“Number_Code 基于每个不同的 Side_Effect: Session_ID Side_Effect Number_Code 1
这个问题在这里已经有了答案: Reshape multiple value columns to wide format (5 个答案) 关闭 2 年前。 我无法让我的数据框 pivot_wider
这个问题在这里已经有了答案: Reshape multiple value columns to wide format (5 个答案) 关闭 2 年前。 我无法让我的数据框 pivot_wider
我有以下类型的表: 经济特区类值1_1_1121_1_1521_1_2521_1_3111_1_3521_1_4111_1_5211_2_1121_2_152 为了在多个新列中传播“Class”列,从
我正在尝试转动它 df 1 38320858 recreation 6 11 2 38408709 business
我有一个在各个列中包含大量 NaN 的数据框。 df values 并使用 pivot_wider 将正数重新放回到它们原来的列中,然而,这失败了: library(tidyr) df %>% p
我有一个在各个列中包含大量 NaN 的数据框。 df values 并使用 pivot_wider 将正数重新放回到它们原来的列中,然而,这失败了: library(tidyr) df %>% p
我有以下用例 pivot_wider : 我有一个用逗号分隔的字符串的数据集。我想为每个逗号分隔值创建唯一的列,就像一个虚拟变量采用 1 s(存在值)和 0 s(值不存在)。 我可以使用下面显示的方法
我有这个数据: df_1 % pivot_longer(cols = c(x, y), names_to = 'factor', values_to = 'values',
我有以下我试图传播的数据集。 #create df df head(df) file_number reader event 3098129 aa fail
我对新的 tidyr::pivot_wider() 很着迷具有缺失值功能的函数。 它有时有效,有时无效。 这是一个可重现的示例: require('tidyr') df > green yellow
我是一名优秀的程序员,十分优秀!