r - 根据值将逗号分隔的数字列拆分为多列

标签 r split dplyr tidyr strsplit

我的数据框中有一列 f,我想根据该列中的值将其分散到多个列中。例如:

df <- structure(list(f = c(NA, "18,17,10", "12,8", "17,11,6", "18", 
                           "12", "12", NA, "17,11", "12")), .Names = "f", row.names = c(NA, 
                                                                                        10L), class = "data.frame")

df
#            f
#  1      <NA>
#  2  18,17,10
#  3      12,8
#  4   17,11,6
#  5        18
#  6        12
#  7        12
#  8      <NA>
#  9     17,11
#  10       12

我如何将 f 列拆分为多个列,指示行中的数字。我对这样的事情感兴趣:

          6    8    10   11   12   17   18    
1         0    0    0    0    0    0    0
2         0    0    1    0    0    1    1
3         0    1    0    0    1    0    0
4         1    0    0    1    0    1    0
5         0    0    0    0    0    0    1
6         0    0    0    0    1    0    0
7         0    0    0    0    1    0    0
8         0    0    0    0    0    0    0
9         0    0    0    1    0    1    0
10        0    0    0    0    1    0    0

我想我可以在 f 列上使用 unique 来根据不同的数字创建单独的列,然后执行 grepl 判断具体数字是否在 f 列,但我想知道是否有更好的方法。类似于 tidyr 包中的 spreadseparate

最佳答案

使用 tidyr::separate_rows 的解决方案如下:

library(tidyverse)
df %>% mutate(ind = row_number()) %>%
  separate_rows(f, sep=",") %>%
  mutate(f = ifelse(is.na(f),0, f)) %>%
  count(ind, f) %>%
  spread(f, n, fill = 0) %>%
  select(-2) %>% as.data.frame()

   # ind 10 11 12 17 18 6 8
# 1    1  0  0  0  0  0 0 0
# 2    2  1  0  0  1  1 0 0
# 3    3  0  0  1  0  0 0 1
# 4    4  0  1  0  1  0 1 0
# 5    5  0  0  0  0  1 0 0
# 6    6  0  0  1  0  0 0 0
# 7    7  0  0  1  0  0 0 0
# 8    8  0  0  0  0  0 0 0
# 9    9  0  1  0  1  0 0 0
# 10  10  0  0  1  0  0 0 0

关于r - 根据值将逗号分隔的数字列拆分为多列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50650152/

相关文章:

r - 如何在R中使用dplyr生成以当前行为条件的多行?

r - R中多列的密集排名

r - 对矩阵的连续行执行数学运算

r - 将熔化的 table 变回 table

r - 如何在 data.table 中迭代

r - 将函数参数传递给 dplyr 和 ggplot

css - 在 R Shiny 中闪烁加载文本

java - 在 Java 中拆分和合并大文件(大小以 GB 为单位)

php - 使用 PHP 拆分 URL

r - 在R中用 'separate'(tidyr)拆分数据帧的几列