- 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/
我有一个字符串 "1,23,45,448.00",我想用小数点替换所有逗号,用逗号替换所有小数点。 我需要的输出是“1.23.45.448,00” 我尝试用 . 替换 , 如下: var mystri
我刚刚开始阅读 C。 情况: x = ( y = 3, ( z = ++y + 2 ) + 5 ) 它首先评估y = 3,然后评估( z =++y + 2) 我的问题: 它应该首先评估( z =++y
我是 VIM 初学者,我有一个奇怪的问题。我开始在终端模拟器中使用 vim,但今天我转向了 gVim。然后我意识到我不能在插入模式下写逗号!我试过 :map , , :imap ,都说没有找到映射。然
我上面有一个 JavaScript 正则表达式函数代码: function AcceptDigits(objtextbox) { var exp = /[^\d{1,3}]/g; ob
我需要使用 Java 的 split() 方法分割字符串。如何编写某个单词的分隔符的正则表达式模式?例如“和”? 我得到了分割空格和逗号的模式,即 [,\\s] 但我想添加单词 and ,以便它也成为
我们通常使用逗号来强调句子中的某些内容。但是说到搜索引擎优化,我只是想知道这是否有用,尤其是当标题标签或页面标题中所需的字符数有限(65到70个)以便爬虫读取时。我们是否需要使用逗号? 最佳答案 页面
我想找出每个学科学期的学生上课人数。以下是给出正确答案的查询 select semester,subject,count(stdId) from tblSubjectMaster group by s
int m = 5, d = 12, y = 1975, val; // May 12, 1975 谁能解释一下下面代码行中逗号运算符的功能/用途: val = (d+=m<3?y--:y-2
我不能在 Visual Studio 2013 中使用 Ctrl+, 和在 Windows 8.1 中使用 Pycharm。有没有办法找到哪个应用程序占用了这个快捷方式/热键? 我试过 Windows
我发现很难用谷歌搜索 powershell 中这两种执行方法调用的区别的答案。 : $member = "1.2.3.4:567" # IPaddress + port for demonstrati
谁能建议我如何在 emacs 中通过 n 逗号前进(或后退)? 我正在尝试浏览 CSV 文件 我知道我可以做类似的事情: C-u 100 M-f 但是能够在逗号上做更多的正则表达式会更准确 最佳答案
很难说出这里问的是什么。这个问题是含糊的、模糊的、不完整的、过于宽泛的或修辞性的,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开它,visit the help center 。 已关
这是一个棘手的问题,我会尽力描述它。 我有一个文本输入,用户可以在标签中输入。 用户在输入中键入标签(例如“starcraft”)并按下逗号键后,我希望逗号之前的所有字符(即单词“starcraft”
我如何打印 csv 文件中逗号后的最后一个值,我想循环遍历该文件并打印出最后一个值: 数据: 20181016135716, 00-00-00-00-00-04, 10.0.0.1, 10.0.0.8
这个问题在这里已经有了答案: How to format the HH:mm:ss separators of a TimeSpan in a culture-aware manner? (3 个答
我想去掉除数字、$、逗号 (,) 之外的所有内容。 这只是 strip 字母 string Cadena; Cadena = tbpatronpos6.Text;
我已经在我的 xml 文件中创建了一个编辑文本。这是我的代码: 问题是在我的输出项目中它只能工作其中一个。只有点或只有逗号。怎么了 ?在模拟器中工作正常,只有在我的版本中没有。 最佳答案 我用不同
我正在尝试编写一个正则表达式来提取由空格分隔的单词(可选逗号 + 空格),从单词中删除“堆栈”前缀(如果有的话)。我正在尝试找到一个纯正则表达式解决方案,而无需对结果进行任何后处理或类似(如果可能)。
我正在尝试在数据库中插入一些数据,但遇到了一些麻烦。目前我无法将数据添加到我的表中,我不知道为什么。 我正在使用一些您不需要理解的通用方法,这适用于我的所有项目,并且在任何项目中都没有任何错误。 以下
我想从 json 中删除尾随逗号, { "key1": "value1", "object": { "key2": "value2", // <- remove comma },
我是一名优秀的程序员,十分优秀!